Economia de escalonamento, desnormalizando o NoSQL para conteúdo personalizado [fechado]

5

Estou usando o Cassandra para um aplicativo intensivo de dados. Com relativamente pouca experiência em operações e implantação, a especialidade que estou procurando é alguém que possa ler o exemplo abaixo e decidir se estou negligenciando soluções mais simples ou se os recursos necessários tornam esse problema caro ou intratável.

  1. ~ Um milhão de entradas em uma tabela de livros: cada entrada ~ 30 colunas - nome, matriz de temas, ano, etc.

  2. ~ 1-10 mil livrarias que contêm, cada uma, um subconjunto da tabela principal em (1), talvez contendo o campo id de (1). Portanto, uma tabela de livraria para os metadados da loja e uma tabela de inventário da livraria serão necessárias.

  3. Um milhão de usuários - um milhão de entradas em uma tabela de usuários.

Um algoritmo de recomendação seqüencial é projetado para classificar a melhor opção dentre todas as possibilidades para um usuário em uma determinada loja. Primeiro, pode marcar facilmente cada livro na tabela do livro principal com um 1 ou 0 com base no gosto do usuário. Assim, ele pode "filtrar" o que ele sabe que o usuário não gosta, e o 1 passa para a rodada de pontuação. segundo, pode levar dados de usuários em tempo real e classificar os livros restantes para a loja que o usuário visita.

a questão é como aplicar a primeira etapa de recomendação binária aos dados.

a) cada uma das 10.000 livrarias tem seu próprio subconjunto de inventários da lista de livros principal. na pior das hipóteses, se todas as lojas tiverem todos os livros (apenas finja), são 10.000 lojas e um milhão de livros. então uma operação em lote (faísca talvez) pode puxar o estoque de uma única loja para pontuar para um usuário, e na lógica da aplicação , cada livro é verificado em uma tabela de hash para saber se ele passou pela primeira recomendação binária filtro, que é consultado a partir da tabela de usuários.

b) criar uma tabela user-store-book (já que o usuário tem apenas uma ou duas lojas favoritas) que inclui os resultados booleanos da primeira rodada de recomendação para cada livro. isso significa um milhão de usuários X um milhão de livros X 2 lojas como entradas nesta tabela. então o trabalho em lote apenas consulta diretamente os livros recomendados para classificar.

Para colocar minha pergunta de forma mais sucinta, estou preocupado que na solução a, os recursos de CPU necessários e IO extra fariam uma solução de baixo desempenho, e que a grande quantidade de dados na solução b poderia tornar esta solução intratável.

    
por Ar415 31.12.2014 / 01:50
fonte

1 resposta

0

Você não pode reagrupar os livros por gênero ou grupos de gostos para reduzir o problema a uma escala menor? Parece-me que a principal questão é que você está tentando usar um grande conjunto de dados que não é refinado o suficiente para fornecer uma visão em tempo real. Você provavelmente deve tentar agrupar os livros nessa situação. Se você não puder, você está com a iteração completa e limitada às duas soluções listadas.

Edit: eu esqueci, mas o cluster de usuários também pode fazer sentido

    
por 09.09.2015 / 03:55
fonte