2010-08-15 7 views
8

Nuestra empresa está trabajando en un proyecto que requiere una base de datos con 30-50 millones de filas de datos de productos. Estas filas contienen texto que debe buscarse al mismo tiempo miles de veces por segundo. Además, cada búsqueda debe tomar menos de un segundo para ejecutarse.Base de datos masiva con búsqueda de texto completo - Sphinx, Lucene, Cassandra, MongoDB, CouchDB

Así que, en general, tenemos una base de datos de filas de 50M que debe buscarse miles de veces por segundo. Tenga en cuenta que estas son búsquedas de texto completo. Sé que MySQL o cualquier base de datos relacional por sí sola no pueden manejar este tipo de trabajo. Por lo tanto, estamos buscando a alguien que pueda diseñarnos la configuración correcta y ayudarnos a implementarla, por el precio que especifique.

En primer lugar, nos gustaría saber cuáles son nuestras mejores opciones aquí. Personalmente he estado investigando cosas como Sphinx, Lucene, Cassandra, MongoDB, CouchDB, Solr, etc., pero realmente no sé cuál debería usarse junto con otra para darnos la configuración más eficiente posible.

Por lo tanto, si alguien pudiera simplemente darnos un consejo, o aceptar nuestra oferta de trabajo, sería muy apreciado.

Puede ponerse en contacto conmigo a través de PM aquí, y le daré mi correo electrónico/IM/número de teléfono para seguir debatiendo.

Gracias!

Respuesta

2

Paul, bienvenido a SO. Este no es realmente el lugar correcto para intentar que alguien trabaje para usted, pero este es mi consejo:

Verdaderamente, dependiendo de los tipos de búsquedas que está haciendo, escribir MySql puede ser un poco prematuro.

Dado que se trata de datos de productos, me imagino que sus búsquedas son búsquedas de texto completo, por lo que escribir MySql no es prematuro. Sphinx es genial, pero un poco difícil de configurar. El beneficio es que tiene la capacidad de indexar desde mysql directamente, y también puede interactuar con él con cualquier conector/enlaces mysql que esté utilizando en su aplicación, ya que sabe cómo hablar con el protocolo de mysql.

Yo diría que cassandra, couch y mongo no son realmente lo que estás buscando, ninguno de ellos indexa el texto nativamente como lo hace esfinge. Podrías tirar los tuyos encima de ellos, pero sería bastante contraproducente.

Nunca he trabajado con lucene pero he oído cosas buenas, es una solución similar a Sphinx afaik.

buena suerte

+0

Hey, Gracias por la respuesta! Y sí, olvidé mencionar que son búsquedas de texto completo. La razón por la que descarto MySQL es por el bloqueo de la tabla. Las funciones de texto completo requieren myisam, que bloquea las tablas y, por lo tanto, perjudicaría las miles de búsquedas simultáneas que necesitaríamos realizar cada segundo. Además, las búsquedas de texto completo son más lentas que otras alternativas. Espero que el emparejamiento de MySQL con Sphinx pueda resolver estos dos problemas, pero no estoy seguro, por eso publiqué aquí :) ¡Gracias de nuevo! –

8

El almacenamiento de datos y búsqueda son dos cosas diferentes. Si observa arquitecturas como ebay, tienen servicios separados & servidores para la operación de búsqueda. 50m filas no es nada, puede almacenarlo con cualquiera de las áreas de almacenamiento de datos, ninguno de ellos es perfecto, por lo que la diferencia está en los casos de uso. Por ejemplo: cassandra tiene el rendimiento de inserción más rápido con cualquier tamaño de datos, puede escalar fácilmente a petabytes con cientos de máquinas (sin necesidad de shard), tiene lucandra (integración de cassandra-lucene, escala bien con datos masivos pero un juguete en comparación con elasticsearch) , alta durabilidad, ... MongoDB tiene más opciones de consulta (usa btree como dbms), tiene autosharding recientemente, puede indexar todos los campos, pero poca durabilidad, ... Postgresql es el dbms opensource más avanzado que existe, tiene master incorporado/replicación esclava recientemente, puede escalar por fragmentación, ácido & sql compatible ... couchdb no tiene ninguna ventaja en comparación con otros en un caso de uso Creo que es muy lento, si necesito ácido, probablemente use postgresql. La funcionalidad completa de búsqueda de texto integrada con estas áreas de almacenamiento de datos tiene algunos problemas y no es escalable.

El motor de búsqueda de código abierto más avanzado (datos masivos, alto rendimiento, simple, distribuido, tolerante a fallos, api de reposo) es elasticsearch, se puede considerar como lucene distribuido. Solr es lagecy en comparación con elascticsearch. el uso de lucene/sphinx en bruto no es escalable.

Si yo fuera usted, probablemente elija una de las áreas de almacenamiento de datos y utilice elasticsearh para indexarlas y sincronizarlas en mi capa de acceso a datos (necesita modificar índices en db insert/update/delete).

Saludos

Cuestiones relacionadas