2010-01-31 56 views
48

¿Cuáles son las mejores prácticas para bases de datos NoSQL, OODB o cualquier otro acrónimo que pueda existir para ellos?Buenas prácticas de NoSQL

Por ejemplo, a menudo he visto usar un campo "tipo" para decidir cómo debe interpretar el documento de DB (en términos de couchDB/mongoDB) el cliente, la aplicación.

Donde corresponda, utilice PHP como lenguaje de referencia. Leer: también me interesa saber cómo se pueden manejar mejor estos datos en el lado del cliente, no solo estrictamente la estructura de la base de datos. Esto significa prácticamente que también estoy buscando patrones como "ORM" para DB de SQL (registro activo, mapeador de datos, etc.).

No dude en hacer declaraciones sobre cómo una base de datos así y las nuevas características de PHP 5.3 podrían funcionar mejor juntas.

Respuesta

36

Creo que actualmente, la idea de los almacenes de datos NoSQL y el concepto de bases de datos de documentos es tan nueva y diferente de las ideas establecidas que impulsan el almacenamiento relacional que actualmente hay muy pocas (si las hay) mejores prácticas.

Sabemos en este punto que las reglas para almacenar sus datos dentro de, por ejemplo, CouchDB (o cualquier otra base de datos de documentos) son bastante diferentes a las de una relacional. Por ejemplo, es casi un hecho que la normalización y el objetivo de 3NF no es algo que uno debería esforzarse. Uno de los ejemplos comunes sería el de un blog simple.

En una tienda relacional, tendría una tabla para "Publicaciones", "Comentarios" y "Autores". Cada autor tendría muchas publicaciones, y cada publicación tendría muchos comentarios. Este es un modelo que funciona bastante bien y se correlaciona bien con cualquier DB relacional. Sin embargo, almacenar los mismos datos dentro de un docDB probablemente sería bastante diferente. Probablemente tendrías algo así como una colección de documentos Post, cada uno de los cuales tendría su propio Autor y una colección de Comentarios integrados. Por supuesto, esa no es la única forma en que podrías hacerlo, y es un compromiso (ahora solicitar una sola publicación es rápido; solo se realiza una operación y se recupera todo), pero no se puede mantener la relación entre los autores y las publicaciones (ya que todo se convierte en parte del documento posterior).

Yo también he visto ejemplos haciendo uso de un atributo "tipo" (en un ejemplo de CouchDB). Claro, eso suena como un enfoque viable. ¿Es el mejor? No tengo ni idea. Ciertamente, en MongoDB utilizaría colecciones independientes dentro de una base de datos, lo que haría que el atributo de tipo no tenga sentido. En CouchDB ... tal vez es mejor. ¿Las otras alternativas? ¿Bases de datos separadas para cada tipo de documento? Esto parece un poco raro, así que me incliné hacia la solución de "tipo". Pero solo soy yo. Tal vez hay algo mejor.

Me doy cuenta de que he hablado un poco aquí y he dicho muy poco, muy probablemente nada que no supieras. Sin embargo, mi punto es este: creo que nos corresponde a nosotros experimentar con las herramientas que tenemos y los datos con los que estamos trabajando y con el tiempo las buenas ideas se difundirán y se convertirán en las mejores prácticas de. Creo que estás preguntando demasiado temprano en el juego.

+2

Tienes razón: es demasiado temprano, tal como yo también pensé. +1, pero también esperaré un tiempo para otras opiniones. – Flavius

+1

Como puedo ver hasta ahora, depende en gran medida de las operaciones que pretenda hacer con los datos y la frecuencia con que la aplicación haría esas operaciones en circunstancias normales. Por ejemplo, insertar comentarios en una "publicación" no sería lo mejor si la aplicación implementara una funcionalidad para "acechar" a una persona específica (como "tweets"). – Flavius

+1

Seguro. Creo que las mejores prácticas que surjan se basarán en la forma en que se utilizarán los datos. Se deben tomar decisiones y compromisos diferentes para acomodar mejor esos requisitos. –

6

"NoSQL" debería ser más sobre construir el almacén de datos para seguir los requisitos de su aplicación, no sobre construir la aplicación para seguir una cierta estructura - eso es más como un enfoque SQL tradicional.

No abandone una base de datos relacional "solo porque"; solo hazlo si tu aplicación realmente lo necesita.

+0

Nunca dije que quisiera construir algo para seguir otra cosa. Estaba buscando los mejores patrones que haya utilizado con éxito para que las cosas funcionen mejor juntas. Idealmente, con las características de PHP 5.3.Además, no estoy buscando consejos sobre si usar bases de datos relacionales o orientadas a documentos. – Flavius

Cuestiones relacionadas