español - ¿MongoDB o Cassandra son mejores que MySQL para grandes conjuntos de datos?
cuando usar mongodb (3)
En nuestra base de datos (actualmente MySQL) hay más de 120 millones de registros, y hacemos un uso frecuente de las consultas complejas JOIN y la lógica de nivel de aplicación en PHP que toca la base de datos. Somos una empresa de marketing que hace que la minería de datos sea nuestro enfoque principal, por lo que tenemos muchos informes grandes que deben ejecutarse diariamente, semanalmente o mensualmente.
Al mismo tiempo, el servicio al cliente opera en un esclavo replicado de la misma base de datos.
Nos encantaría poder hacer que estos informes sucedan en tiempo real en la web en lugar de tener que generar manualmente hojas de cálculo para ellos. Sin embargo, muchos de nuestros informes requieren una gran cantidad de tiempo para extraer datos (en algunos casos, más de una hora).
No operamos en la nube, sino que optamos por operar con dos servidores físicos en nuestra sala de servidores.
Dado todo esto, ¿cuál es nuestra mejor opción para una base de datos?
Cassandra todavía necesita Hadoop para MapReduce, y MongoDB tiene concurrencia limitada con respecto a MapReduce ...
... asi que ...
... 120 millones de registros no son mucho, y MySQL debería ser capaz de manejar eso. Supongo que es un cuello de botella IO, o estás haciendo muchas lecturas aleatorias en lugar de lecturas secuenciales. Preferiría contratar a un técnico de MySQL por un mes más o menos para sintonizar su esquema y consultas, en lugar de invertir en una nueva solución.
Si proporciona más información sobre su clúster, es posible que podamos ayudarlo mejor. "NoSQL" por sí mismo no es la solución a su problema.
Creo que estás yendo por el camino equivocado sobre el problema.
Pensar que si ingresas en NoSQL obtendrás un mejor rendimiento no es realmente cierto. En el nivel más bajo, estás escribiendo y recuperando una buena cantidad de datos. Eso implica que su cuello de botella es (muy probablemente) HDD I / O (que es el cuello de botella común).
Mantener el hardware que tienes momentáneamente y usar un almacenamiento de datos monolítico no es escalable y, como habrás notado, tiene implicaciones cuando quieres hacer algo en tiempo real.
¿Cuáles son tus opciones? Necesita escalar el servidor y la configuración del software (que es lo que tendría que hacer con cualquier NoSQL de todos modos, pegar discos duros más rápidos en algún momento). También podría considerar motores de almacenamiento alternativos (que no sean MyISAM e InnoDB; por ejemplo, uno de los mejores motores que aparentemente convierte E / S aleatorias en E / S secuenciales es TokuDB ).
Implementar un subsistema HDD más rápido también ayudaría a sus necesidades ( FusionIO si tiene los recursos para obtenerlo).
Sin más información de su parte (la configuración del servidor, la versión de MySQL que está utilizando y los motores de almacenamiento y los tamaños de datos con los que está trabajando), todo es especulación.
Por mucho que no sea seguidor de MySQL una vez que sus datos se vuelvan grandes, debo decir que ya no necesita moverse a una solución NoSQL. Las filas de 120M no son un gran problema: la base de datos con la que estoy trabajando actualmente tiene ~ 600M en una sola tabla y la consultamos de manera eficiente. Gestionar tantos datos desde una perspectiva de operaciones es el problema; preguntando no es.
Se trata de índices adecuados y el uso correcto de ellos cuando se unen y, en segundo lugar, la configuración de la memoria. Encuentra tus consultas lentas (mysql slow query log FTW!) Y aprende a usar la palabra clave de explicación para entender que son lentos. Luego modifica tus índices para que tus consultas sean eficientes. Además, asegúrese de comprender la configuración de memoria de MySQL. Hay excelentes páginas en los documentos que explican cómo funcionan y no son tan difíciles de entender.
Si ya hizo ambas cosas y todavía tiene problemas, asegúrese de que la E / S del disco no sea un problema. Luego debe buscar otra solución para consultar sus datos, si es así.
Las soluciones NoSQL como Cassandra tienen muchos beneficios. Cassandra es fantástica para escribir datos. Ampliar sus escrituras es muy fácil, solo agregue más nodos. Pero la compensación es que es más difícil recuperar los datos. Desde una perspectiva de costos, si tiene experiencia en MySQl, probablemente sea mejor aprovechar eso y escalar su solución actual hasta que llegue a un límite antes de cambiar por completo su arquitectura subyacente.