Pregunta

Estoy en el medio de la construcción de una nueva aplicación que tendrá características muy similares a Facebook y aunque obviamente no lo puedo nunca tener que lidiar con los gustos de 400.000.000 millones de usuarios que todavía será utilizado por una importante base de usuarios y la mayoría de les exigirán correr muy rápidamente.

Tengo una amplia experiencia con MySQL, pero ofrece unas aplicaciones sociales complejidades, que MySQL no es muy adecuado también. Sé Facebook, Twitter, etc se han movido hacia Cassandra para una gran cantidad de sus datos, pero no estoy seguro de qué tan lejos para ir con ella.

Por ejemplo le almacenar cosas tales como datos de usuario - nombre de usuario, contraseñas, direcciones, etc en Cassandra? ¿Le almacenar correos electrónicos, comentarios, actualizaciones de estado, etc en Cassandra? También he leído un montón de que algo como Neo4j es mucho mejor para la representación de las relaciones de amistad utilizados por aplicaciones sociales, ya que es una base de datos gráfica. Estoy recién empezando por el camino de NoSQL por lo que cualquier orientación es muy apreciada.

¿Hay alguien que sea capaz de asesorar sobre esto? Espero que no estoy siendo demasiado general!

¿Fue útil?

Solución

  

Por ejemplo le almacenar cosas tales como datos de usuario - nombre de usuario, contraseñas, direcciones, etc en Cassandra?

No, ya que no garantiza la coherencia. Cassandra es eventualmente consistentes . Sin duda, no debería haber concurrencia en los datos de una determinada cuenta de usuario, pero no me gustaría a apostar por ella. Puede que no necesite consistencia a su búsqueda de texto completo, el buzón de mensajes, etc., pero que desea la coherencia en todo lo que está relacionado con la seguridad.

  

También he leído muchas que algo como Neo4j es mucho mejor para la representación de las relaciones de amistad utilizados por aplicaciones sociales, ya que es una base de datos gráfica.

Soy un gran fan de la herramienta adecuada para el trabajo correcto. No he utilizado Neo4j pero he estado utilizando db4o (que es una base de datos de objetos) y les resulta muy útil. Esto hace que el desarrollo más fácil de usar una herramienta que soporta de forma nativa a sus necesidades. Ya que se necesita gráficos y trabajar con gráficos en SQL es un dolor, me gustaría recomendar a darle un aspecto, y evaluar si se ajusta a sus necesidades específicas.

Mezcla de bases de datos de sonidos como una idea buena para mí, siempre y cuando la elección es natural (es decir la base de datos respectiva es útil con los trabajos específicos, a las bases de datos de gráficos para gráficos, una mesa para las tablas, bases de datos de fuego para cualquier cosa que seguridad de las transacciones necesidades , etc ...).

Otros consejos

Yo sugeriría hacer algunas pruebas con MySQL y con Cassandra. Cuando tuvimos que hacer una elección entre PostgreSQL y MongoDB en una de mis puestos de trabajo, que en comparación tiempo de consulta en millones de registros en tanto y descubrió que con cerca de 10 millones de registros de Postgres nos proporcionarían con tiempos de respuesta adecuados.

Sabíamos que no íbamos a llegar a ese número de registros durante al menos un par de años, y que tenía experiencia con Postgres (mientras MongoDB no estaba muy maduro en el momento), así que fuimos con Postgres.

Mi punto es que es probable que pueda mirar a los puntos de referencia de MySQL, hacer algunas pruebas de rendimiento a sí mismo, estimar el tamaño del conjunto de datos y cómo se va a crecer y tomar una decisión informada de esa manera.

En cuanto a la mezcla de bases de datos relacionales y no relacionales, que es algo que considerar también, pero decidió que sería demasiado de una molestia, ya que eso significaría mantener dos tipos de software, y escribir un poco de código de unión para obtener los datos de ambos. Creo que Cassandra sería perfectamente capaz de almacenar todos sus datos.

Facebook no mover a Cassandra, que lo creó. :) Que yo sepa, NoSQL DBMSes no requieren o incluso mencionar (gracias a mnemosyn para la corrección, Facebook utiliza Oracle y Cassandra) que corre al lado del otro con una base de datos relacional. Este es uno ejemplo opuesto (almacenar información de usuario en un NoSQL DB).

Yo diría que si Cassandra es lo suficientemente bueno para Facebook, es probable que sea lo suficientemente bueno para su proyecto. No estaría mal para tratar de abstraer la lógica de persistencia para que tenga la posibilidad de cambiar a otra cosa, si se trata de eso en absoluto.

exención de responsabilidad: No he (? Todavia) tenido experiencia práctica con las bases de datos NoSQL:. Lo que sé viene de leer sobre él

Cassandra ofrece una buena solución distribuida, y probablemente mejor para un Facebook como plataforma de MySQL (si va a necesitar escala). Pero Casandra no es adecuado para las relaciones de datos en las que tendrá un reto relación de muchos a muchos. Una base de datos gráfica ligada a Cassandra proporcionaría tanto las necesidades de volumen mayor, además de una capacidad de relación de consulta muy rápido. Estamos trabajando en algo que combina las dos tecnologías, y siempre interesado en los tipos de requisitos de su plataforma presentaría. Si usted tiene alguna pregunta sobre cómo manejar ciertas cuestiones relacionadas con los datos que me encantaría escucharlos, tal vez podamos ayudar a resolverlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top