Base de dados para pesquisas super-rápidas

Temos uma matriz de dados de 300 Gb + que gostaríamos de consultar o mais rápido possível. Bases de dados SQL tradicionais (especificamente, servidor SQL) não podem lidar com este volume tão eficazmente quanto precisamos( como, executar uma select com 10-20 condições em where cláusula em menos de 10 segundos), por isso estou a investigar outras soluções para este problema.

Estive a ler sobre o NoSQL e tudo isto parece promissor, mas prefiro ouvir de quem o usou na vida real.

O que foi? pode sugerir aqui?

edite para esclarecer o que procuramos.

Somos uma empresa a desenvolver uma aplicação em que os utilizadores podem procurar excursões e realizar reservas de tais excursões, pagando-as com os seus cartões de plástico. Tudo isto pode certamente ser específico da Rússia, por isso, tenham paciência comigo.

Quando um utilizador entra no site, é-lhe apresentado um formulário semelhante a este:

texto Em Alt http://queenbee.alponline.ru/searchform.png

aqui, o utilizador selecciona de onde ela sai e para onde vai, datas, duração e tudo isso.

Depois de carregar em "procurar" um pedido vai para o nosso servidor DB, que, com não consegue lidar com essa carga: as consultas incluem vários tipos de parâmetros. O Sharding também não funciona bem.

Então, o que procuro é uma espécie de pseudo-base de dados, que pode fazer pesquisas rápidas.

Author: Anton Gogolev, 2010-02-09

7 answers

Se quiser fazer consultas ad-hoc para a apresentação de relatórios ou análise, provavelmente estará melhor se usar algo que funcione bem com ferramentas de relatórios fora de prazo. Caso contrário, é provável que você esteja sendo arrastado o tempo todo para escrever pequenos programas de relatório para consultar os dados. Esta é uma greve contra bases de dados do tipo NoSQL, mas pode ou não ser um problema dependendo de suas circunstâncias.

300GB não deve ultrapassar as capacidades das plataformas RDBMS modernas., até o servidor de MS SQL. Algumas outras opções para grandes consultas de banco de dados deste tipo são:

  • Veja se você pode usar um cubo SSAS e agregações para mitigar seus problemas de desempenho da consulta. A otimização baseada no uso pode lhe dar um desempenho adequado sem ter que obter outro sistema de banco de dados. O SSAS também pode ser usado em Configurações Compartilhadas-nada, permitindo que você remova suas consultas através de um conjunto de servidores relativamente baratos com discos de ligação direta. Olha para a Proclaridade para uma na frente, se fores por aqui.

  • O QI da Sybase é uma plataforma RDBMS que utiliza uma estrutura de dados subjacente otimizada para a comunicação de informações. Tem a vantagem de jogar bem com uma variedade razoável de ferramentas de relatórios convencionais. Existem vários outros sistemas deste tipo, como tijolo vermelho, Teradata ou Greenplum (que usa uma versão modificada do PostgreSQL). A principal greve contra estes sistemas é que eles não são exatamente itens de mercado de massa e pode ser bastante caro.

  • Microsoft tem uma versão compartilhada-nada do servidor SQL no pipeline, que você pode ser capaz de usar. No entanto, eles amarraram - no A fabricantes de hardware de terceiros para que você só pode obtê-lo com hardware dedicado (e, portanto, caro).

  • Procure oportunidades para construir marts de dados com dados agregados para reduzir os volumes de algumas das consultas.

  • Olha para afinar o teu hardware. Anexar directamente matrizes de SAS e Controladores RAID pode colocar através de streaming i / O do tipo usado em varreduras de mesa muito rapidamente. Se você dividir suas mesas sobre um grande número de pares espelhados você pode obter um desempenho de streaming muito rápido - facilmente capaz de saturar os canais SAS.

    praticamente, Você está olhando para obter 10-20GB/seg de seu sub-sistema I/O Se você quiser os alvos de desempenho que você descreve, e é certeiramente possível fazer isso sem recorrer a hardware realmente exótico.

 18
Author: ConcernedOfTunbridgeWells, 2011-04-12 11:39:17

Não tenho a certeza se concordaria que as bases de dados SQL tradicionais não conseguem lidar com estes volumes, posso questionar através de conjuntos de dados muito maiores dentro desses prazos, mas foi projetado especificamente para lidar com esse tipo de trabalho e colocado em hardware adequado, especificamente um sub-sistema IO que é projetado para lidar com grandes pedidos de dados.

 16
Author: Andrew, 2010-02-09 13:46:52

Um servidor SQL devidamente configurado deve ser capaz de lidar com dados nos terrenos sem ter problemas de desempenho. Tenho vários amigos que gerem bases de dados do servidor SQl desse tamanho sem problemas de perfomance.

O seu problema pode ser um ou mais destes:

  • especificações inadequadas do servidor
  • falta de boa separação
  • má indexação
  • concepção deficiente da base de dados
  • má concepção da consulta, incluindo a utilização ferramentas como o LINQ que podem escrever insatisfatorio código de uma base de dados daquele tamanho.
Isso certamente não é a capacidade do servidor SQL para lidar com essas cargas. Se você tem uma base de dados desse tamanho você precisa contratar um profissional dba com experiência na otimização de grandes sistemas.
 14
Author: HLGEM, 2010-02-09 14:46:08

Espero que uma base de dados "convencional" possa fazer o que quiser, desde que estruture os seus dados adequadamente para as consultas que está a fazer.

Você pode achar que, para gerar relatórios respeitavelmente, você precisa resumir seus dados à medida que eles são gerados (ou carregados, transformados, etc) e relatar os dados resumidos.

A velocidade de um SELECT não está relacionada (directamente, na maioria dos casos) com o número de condições na cláusula onde (normalmente), mas tem a ver com a explicação plano e número de linhas examinadas. Existem ferramentas que irão analisar isso para você.

Em última análise, a 300G (que não é assim tão grande) você provavelmente vai precisar de manter alguns dos seus dados no disco (=lento), pelo menos em parte do tempo para que você queira começar a reduzir o número de operações IO necessárias. Reduzir as operações de IO pode significar fazer cobertura de índices, tabelas sumárias e cópias de dados com diferentes índices agrupados. Isto faz com que o teu 300G seja maior, mas quem se importa?

As operações IO são o rei :)

Claramente fazer estas coisas é muito caro em termos de tempo de desenvolvimento, então você deve começar por jogar muito hardware no problema, e só tentar corrigi-lo com software uma vez que isso se torna insuficiente. Muita RAM é um começo (mas não será capaz de armazenar > 10-20% do seu conjunto de dados em um momento em níveis atuais de custo-eficácia) mesmo SSD não são tão caros hoje em dia.

 5
Author: MarkR, 2010-02-10 07:50:36
Isso realmente depende das cláusulas que você tem em seu onde e que tipo de projeção você precisa em seus dados. Pode ser bom o suficiente para criar o índice apropriado na sua mesa.

Também, mesmo tendo uma estrutura de dados ideal não é de uso, se você tem que ler 100GB por consulta, pois isso vai levar seu tempo também.

 3
Author: David Schmitt, 2010-02-09 13:47:21
Pelo que sei, os RDBMS tradicionais são baseados em linhas que optimizam a velocidade de inserção. Mas a otimização da velocidade de Recuperação é melhor alcançada com um sistema de armazenamento baseado em colunas.

Ver coluna orientada DBMS para uma explicação mais completa do que eu poderia dar

 3
Author: Peter M, 2010-02-09 14:00:08

NoSQL, como deve ter lido, não é uma base de dados relacional.

É uma base de dados que armazena pares de valores-chave que pode atravessar usando um API proprietário.

Isso implica que você terá que definir o layout físico dos dados, bem como qualquer otimização de código.

Estou bastante desactualizado nisto, mas há vários anos participei num BerkeleyDB projecto que trata de um volume de dados ligeiramente inferior mas ainda elevado (cerca de 100Gb). Estava tudo bem para as nossas necessidades.

Por favor, note também, embora possa parecer óbvio para si, que as consultas podem ser optimizadas. Pode, por favor, publicar a consulta que usa aqui?

 2
Author: Quassnoi, 2010-02-09 13:48:23