Curioso para saber o que está por trás de um aplicativo de streaming de vídeo? Então junte-se a mim para explorar um design minimalista com os recursos mais essenciais do aplicativo de streaming de vídeo:
Lista todos os vídeos, classificados por data de criação (página inicial).
Liste os vídeos que você começou a assistir.
Assista o vídeo.
Continue assistindo a um vídeo de onde parou.
Exiba uma barra de progresso abaixo de cada miniatura de vídeo.
Abordarei a pilha de tecnologia do aplicativo de streaming de vídeo de amostra e, em seguida, focarei em seu processo de modelagem de dados. O projeto está disponível no GitHub. E aqui está um vídeo para você assistir, se preferir:
Pilha de tecnologia
Usando ScyllaDB para aplicativos de streaming de vídeo de baixa latência
ScyllaDB é um banco de dados NoSQL de baixa latência e alto desempenho compatível com Apache Cassandra e DynamoDB. É adequado para lidar com os requisitos de armazenamento e recuperação de dados em grande escala de aplicativos de streaming de vídeo. O ScyllaDB possui drivers em todas as linguagens de programação populares e, como demonstra este aplicativo de exemplo, integra-se bem com estruturas modernas de desenvolvimento web, como Next.js.
A baixa latência no contexto dos serviços de streaming de vídeo é crucial para proporcionar uma experiência de usuário perfeita. Para estabelecer as bases para o alto desempenho, você precisa projetar um modelo de dados que atenda às suas necessidades. Vamos continuar com um exemplo do processo de modelagem de dados para ver como é.
Modelagem de dados de aplicativos de streaming de vídeo
No curso ScyllaDB University Data Modeling, ensinamos que a modelagem de dados NoSQL deve sempre começar primeiro com sua aplicação e consultas. Em seguida, você trabalha de trás para frente e cria o esquema com base nas consultas que deseja executar em seu aplicativo. Esse processo garante que você crie um modelo de dados que atenda às suas consultas e atenda aos seus requisitos.
Com isso em mente, vamos examinar as consultas que nosso aplicativo de streaming de vídeo precisa para executar em cada carregamento de página.
Página: Continue assistindo
Nesta página você pode listar todos os vídeos que começou a assistir. Esta visualização inclui as miniaturas dos vídeos e a barra de progresso abaixo da miniatura.
Consulta – Obtenha o progresso da observação:
SELECT video_id, progress FROM watch_history WHERE user_id = ? LIMIT 9;
Esquema – Tabela de histórico de exibição:
Para esta consulta, faz sentido definir user_id como chave de partição porque esse é o filtro que usamos para consultar a tabela de histórico de exibição. Lembre-se de que esse esquema poderá precisar ser atualizado posteriormente se houver uma consulta que exija filtragem em outras colunas além da user_id. Por enquanto, porém, esse esquema está correto para a consulta definida.
Além do valor do progresso, o aplicativo também precisa buscar os metadados reais de cada vídeo (por exemplo, o título e a imagem em miniatura). Para isso, o video tabela deve ser consultada.
Consulta – Obtenha metadados de vídeo:
SELECT * FROM video WHERE id IN ?;
Observe como usamos o operador “IN” e não “=” porque precisamos buscar uma lista de vídeos, não apenas um único vídeo.
Esquema – Tabela de Vídeo:
Para a tabela de vídeo, vamos definir o id como chave de partição porque esse é o único filtro que usamos na consulta.
Página: Assistir ao vídeo
Se você clicar em qualquer um dos botões “Assistir”, você será redirecionado para uma página com um reprodutor de vídeo onde poderá iniciar e pausar o vídeo.
Consulta – Obtenha conteúdo de vídeo:
SELECT * FROM video WHERE id=?;
Esta é uma consulta semelhante àquela executada na página Continuar assistindo. Portanto, o mesmo esquema também funcionará para esta consulta.
Esquema – Tabela de Vídeo:
Página: Vídeos mais recentes
Por fim, vamos detalhar a página Vídeos Mais Recentes, que é a página inicial do aplicativo. Analisamos esta página por último porque é a mais complexa do ponto de vista da modelagem de dados. Esta página lista 10 dos vídeos enviados mais recentemente que estão disponíveis no banco de dados, ordenados pela data de criação do vídeo.
Teremos que buscar esses vídeos em duas etapas: primeiro, obter os carimbos de data e hora e, em seguida, obter o conteúdo real do vídeo.
Consulta – Obtenha o Carimbo de hora do 10 vídeos mais recentes:
SELECT id, top10(created_at) AS date FROM recent_videos;
Você pode notar que usamos uma função personalizada chamada top10(). Esta não é uma função padrão no ScyllaDB. É uma função definida pelo usuário (UDF) que criamos para resolver esse problema de modelagem de dados. Esta função retorna um array dos mais recentes created_at carimbos de data/hora na tabela. Criar uma nova UDF no ScyllaDB pode ser uma ótima maneira de resolver seus desafios exclusivos de modelagem de dados.
Esses valores de carimbo de data/hora podem então ser usados para consultar o conteúdo de vídeo real que queremos mostrar na página.
Consulta – Obtenha metadados para esses vídeos:
SELECT * FROM recent_videos WHERE created_at IN ? LIMIT 10;
Esquema – Vídeos recentes:
Na visualização materializada de Vídeos recentes, o created_at coluna é a chave primária, porque filtramos por essa coluna em nossa primeira consulta para obter os valores de carimbo de data/hora mais recentes. Esteja ciente de que, em alguns casos, isso pode causar uma partição quente.
Além disso, a IU também mostra uma pequena barra de progresso abaixo da miniatura de cada vídeo que indica o progresso que você fez ao assistir aquele vídeo. Para buscar esse valor para cada vídeo, o aplicativo precisa consultar o watch history mesa.
Consulta – Obtenha o progresso da exibição de cada vídeo:
SELECT progress FROM watch_history WHERE user_id = ? AND video_id = ?;
Esquema – Histórico de exibição:
Você deve ter notado que a tabela de histórico de exibição já foi usada em uma consulta anterior para buscar dados. Desta vez, o esquema deve ser ligeiramente modificado para se adequar a esta consulta. Vamos adicionar video_id como uma chave de cluster. Dessa forma, a consulta para buscar o progresso da observação funcionará corretamente.
É isso. Agora vamos ver o esquema final do banco de dados!
Esquema final do banco de dados
Função definida pelo usuário para a página de vídeos mais recentes
Esta UDF usa Lua, mas você também pode usar WASM para criar UDFs no ScyllaDB. Ao criar a função, certifique-se de habilitar UDFs no arquivo de configuração scylla.yaml (local: /etc/scylla/scylla.yaml):
Esperamos que você tenha gostado de nosso aplicativo de streaming de vídeo e que ele tenha ajudado a construir aplicativos de baixa latência e alto desempenho com ScyllaDB. Se quiser continuar aprendendo, confira a ScyllaDB University onde temos cursos gratuitos sobre modelagem de dados, drivers ScyllaDB e muito mais. Se você tiver dúvidas sobre o aplicativo de amostra de streaming de vídeo ou ScyllaDB, acesse nosso fórum e vamos discutir!
Mais aplicativos de amostra do ScyllaDB:
Recursos relevantes:
YOUTUBE.COM/THENEWSTACK
A tecnologia avança rápido, não perca um episódio. Inscreva-se em nosso canal no YouTube para transmitir todos os nossos podcasts, entrevistas, demonstrações e muito mais.
SE INSCREVER
Attila Tóth é desenvolvedor defensor do ScyllaDB. Ele escreve tutoriais e postagens em blogs, palestra em eventos, cria demonstrações e exemplos de aplicativos para ajudar os desenvolvedores a criar aplicativos de alto desempenho.
Este site utiliza cookies para melhorar sua experiência de navegação. Ao continuar, você concorda com o uso de cookies. Para mais informações, consulte nossa Política de Privacidade.
Funcional
Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrónicas.
Preferências
O armazenamento ou acesso técnico é necessário para o propósito legítimo de armazenar preferências que não são solicitadas pelo assinante ou usuário.
Estatísticas
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos.O armazenamento técnico ou acesso que é usado exclusivamente para fins estatísticos anônimos. Sem uma intimação, conformidade voluntária por parte de seu provedor de serviços de Internet ou registros adicionais de terceiros, as informações armazenadas ou recuperadas apenas para esse fim geralmente não podem ser usadas para identificá-lo.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou para rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.