2010-08-15 14 views
8

Notre société travaille sur un projet qui nécessite une base de données avec 30-50 millions de lignes de données produit. Ces lignes contiennent du texte qui doit être recherché simultanément des milliers de fois par seconde. De plus, chaque recherche doit prendre moins d'une seconde à exécuter. Donc, dans l'ensemble, nous avons une base de données de 50 Mo qui doit être recherchée des milliers de fois par seconde. Gardez à l'esprit que ce sont des recherches en texte intégral. Je sais que MySQL ou toute autre base de données relationnelle ne peut pas gérer ce type de travail. Nous cherchons donc quelqu'un qui peut concevoir la bonne configuration pour nous et nous aider à la mettre en œuvre, pour un prix que vous spécifiez.Base de données massive w/Fulltext Recherche - Sphinx, Lucene, Cassandra, MongoDB, CouchDB

Tout d'abord, nous aimerions savoir quelles sont nos meilleures options ici. J'ai personnellement fait des recherches sur des choses comme Sphinx, Lucene, Cassandra, MongoDB, CouchDB, Solr, etc, mais je ne sais vraiment pas ce qui devrait être utilisé en conjonction avec un autre pour nous donner la configuration la plus efficace possible. Donc, si quelqu'un pouvait simplement donner quelques conseils, ou accepter notre offre d'emploi, ce serait grandement apprécié.

Vous pouvez me contacter via PM ici, et je vais vous donner mon email/IM/numéro de téléphone pour discuter plus en détail.

Merci!

Répondre

2

Paul, bienvenue à SO. Ce n'est pas vraiment le bon endroit pour essayer d'obtenir quelqu'un pour travailler pour vous, mais voici mon conseil:

Vraiment en fonction des types de recherches que vous faites écrire MySql off peut être un peu prématuré.

Comme il s'agit de données de produit, j'imagine que vos recherches sont des recherches de texte intégral, écrire MySql n'est donc pas prématuré. Sphinx est super mais un peu difficile à configurer. L'avantage est qu'il a la capacité d'indexer directement à partir de mysql, et vous pouvez également l'interfacer avec n'importe quel connecteur/liaison mysql que vous utilisez dans votre application car il sait comment parler du protocole de mysql. Je dirais que cassandra, canapé, et mongo ne sont pas vraiment ce que vous cherchez, aucun d'entre eux nativement indexent le texte comme le fait sphinx. Vous pourriez rouler le vôtre, mais ce serait plutôt contre-productif.

Je n'ai jamais travaillé avec lucene mais j'ai entendu de bonnes choses, c'est une solution similaire à Sphinx afaik.

bonne chance

+0

Hey, Merci pour la réponse! Et oui, j'ai oublié de mentionner qu'il s'agit de recherches en texte intégral. La raison pour laquelle je rejette MySQL est à cause du verrouillage de la table. Les fonctions de texte intégral requièrent myisam, qui verrouille les tables et nuirait aux milliers de recherches simultanées dont nous aurions besoin chaque seconde. En outre, les recherches de texte intégral sont plus lentes que les autres alternatives. J'espère que l'association de MySQL avec Sphinx peut prendre soin de ces deux problèmes, mais je ne suis pas vraiment sûr, c'est pourquoi j'ai posté ici :) Merci encore! –

8

Le stockage de données et la recherche sont deux choses différentes. Si vous regardez des architectures comme ebay, ils ont des services distincts pour l'opération de recherche. 50m lignes n'est rien, vous pouvez le stocker avec l'un des datastores, aucun d'eux n'est parfait, donc la différence est des cas d'utilisation. Ex: cassandra a la performance d'insertion la plus rapide avec n'importe quelle taille de données, peut facilement peser à pétaoctets avec des centaines de machines (pas besoin de partitionner), a lucandra (intégration cassndra-lucene, évolue bien avec des données massives mais un jouet comparé à elasticsearch) , haute durabilité, ... MongoDB a plus d'options de requête (utilise btree comme un dbms), a autosharding récemment, peut indexer tous les champs, mais une mauvaise durabilité, ... Postgresql est le dbms opensource le plus avancé là-bas, a builtin master/réplication esclave récemment, peut redimensionner par sharding, acide & sql conforme ... couchdb n'a aucun avantage par rapport aux autres dans un cas d'utilisation je pense, c'est sacrément lent, Si j'ai besoin d'acide, je utilise probablement postgresql. La fonctionnalité de recherche fullText intégrée avec ces banques de données présente des problèmes et n'est pas évolutive.

Le moteur de recherche open source le plus avancé (données massives, haute performance, simple, distribué, tolérant aux pannes, repos api) est elasticsearch, vous pouvez le considérer comme distribué. Solr est lagecy comparé à elascticsearch. l'utilisation de lucene/sphinx brut n'est pas évolutive. Si vous étiez vous, je choisis probablement l'un des datastores et j'utilise elasticsearh pour l'indexer et les synchroniser sur ma couche d'accès aux données (besoin de modifier les index sur db insert/update/delete).

Cordialement