2011-03-09 9 views
6

¿Cuál sería la mejor alternativa sin sql para almacenar datos de usuario con altas tasas de actualización y volumen de datos?CouchDB o Mongo para velocidades de actualización y volumen muy altos?

por ejemplo, volcado de decenas a cientos de líneas de estado de usuario/datos de estado de navegación por solicitud de página para un sitio de gran volumen.

Actualmente estoy viendo Mongo o Couch, pero estoy abierto a otras alternativas.

EDITAR (en respuesta a la solicitud de kprobst): Sería alojado en Linux y múltiples instancias (ya sea HW o VM) pueden estar disponibles.

El sistema se usa para almacenar un estado de visitantes del sitio, de 1 a 2 semanas para usuarios no autenticados y (potencialmente) indefinidamente para usuarios autenticados.

Creo que la forma actual de pensar dentro del negocio es usar CouchDB como lo usamos en otros lugares, pero también sigo leyendo que es el que menos rendimiento ofrece para la actualización constante y existe la posibilidad de que este sistema se actualice 30 - 400 líneas de json en documentos múltiples, por usuario, mientras un usuario interactúa con el sitio (se espera que el uso sea muy alto).

Además de este estado "volcado" se almacenaría otra información del usuario y sería capaz de realizar consultas que serían útiles.

+0

Prefiero MongoDB para ese tipo de trabajo analítico. Puede usar el auto-sharding de MongoDB y mejorar la escala de escritura. Es posible escribir en paralelo en cada fragmento. – edze

Respuesta

6

Recientemente investigué en una serie de tecnologías NoSQL, incluidas CouchDB y MongoDB. La sensación que tengo es que MongoDB está más orientado al rendimiento que CouchDB, posiblemente a expensas de ciertas características. p.ej. MongoDB usa controladores específicos del lenguaje, CouchDB usa REST. MongoDB es "Actualizar en el lugar", mientras que CouchDB es MVCC. MongoDB almacena datos en archivos mapeados en memoria.

Elegí MongoDB porque encajaba con el tipo de datos que quiero almacenar y el rendimiento que ofrece. En mi humilde opinión, no creo que una solución MVCC sea la más adecuada para el uso que ha descrito. A medida que se actualiza un documento, en lugar de sobrescribir el documento existente, crea una nueva versión del mismo y luego marca el anterior como obsoleto, lo que significa que deben borrarse/compactarse periódicamente.Cuantas más actualizaciones haya, mayor será el trabajo que implicará y que me interesaría.

Esto no quiere decir que MongoDB sea la mejor opción que CouchDB, ya que ofrecen diferentes cosas y lo que puede ser una desventaja de una tecnología en un escenario específico, podría ser una ventaja en otro escenario. Obviamente tiene la ventaja de que CouchDB ya lo está usando dentro del negocio, por lo que presumiblemente es menos una curva de aprendizaje.

Hay un poco más de una comparación de los 2 en MongoDB.org.

+0

Mongo logró el rendimiento a costa de ACID. Entonces, si la consistencia es una característica requerida, CouchDB es más adecuado. – csdaraujo

+0

En mi humilde opinión, mongodb tiene una mayor consistencia que CouchDB porque mongodb utiliza la replicación maestro-esclavo y la escritura solo está en el nodo maestro. CouchDB utiliza la replicación master-master asincrónica y proporciona "coherencia final". – Lan

+0

CouchDB permite master para master pero no es maestro para master a menos que lo configure para ser así. – Daniel

1

No dice en qué plataforma está ejecutando, ni en qué plataforma puede alojar su solución nosql. Tampoco especifica si desea un almacén de clave-valor distribuido directo o una base de datos NoSQL. que sería MongoDB. Las dos cosas no son lo mismo, aunque una base de datos NoSQL se puede usar como una tienda kv, supongo.

Dicho esto, si necesita un simple almacén de clave-valor que funciona bien en Linux, yo iría con Redis. De todas las soluciones NoSQL solo he usado MongoDB, pero funciona bien en Server 2008 (64 bit) y excelente en Linux (CentOS).

Realmente depende de lo que necesita y dónde puede alojarlo. MongoDB, por ejemplo, requiere al menos dos instancias. Si proporciona más información, tal vez alguien pueda darle una mejor recomendación.

+0

gracias kprobst, he actualizado mi pregunta según lo solicitado. – jdoig

1

Membase es una base de datos NoSQL basada en memoria agrupada persistente en disco. Fue desarrollado por varios líderes de memcached. Además de su protocolo nativo, también tiene una API 100% compatible con Memcache. Membase ya se usa en aplicaciones de gran volumen, como Farmville.

Membase y CouchOne se fusionaron en Couchbase (donde trabajo, FWIW, pero no trabajo en Membase). Por lo tanto, parece razonable que el futuro de Membase tenga características de CouchDB: consulta de mapa-reducción, replicación/respaldo fuera del sitio, interfaz HTTP REST, etc.

1

Otra opción a considerar es Berkeley DB, que a menudo se utiliza para admitir grandes aplicaciones e infraestructuras basadas en web (Amazon.com, por ejemplo). Berkeley DB es compatible tanto con una clave/valor API (NoSQL) como con una API SQL. Si está compilando una solución SOA basada en Java, puede considerar BDB Java Edition que usa el Heretix Way Back Machine.

Descargo de responsabilidad: Soy uno de los gerentes de producto de Berkeley DB, así que estoy un poco parcial. Dicho esto, BDB fue escrito para proporcionar un almacén de datos integrado rápido, escalable y confiable para exactamente el tipo de operaciones que usted describe.

Cuestiones relacionadas