Colección de citas famosas - Colección de poesías - Información de configuración del archivo de mapeo relacional de objetos

Información de configuración del archivo de mapeo relacional de objetos

Hoy en día, existen muchos competidores fuertes en el espacio NoSQL, que se enfrentan a problemas de datos masivos de diversas maneras. Una de las soluciones importantes es MongoDB. MongoDB es una solución de almacenamiento débilmente estructurada orientada a documentos que utiliza el formato JSON para presentar, consultar y modificar datos.

La documentación de MongoDB es bastante completa y escalar es tan fácil como instalarla. Proporciona soporte conceptual para redundancia, división, indexación y asignación/reducción. La comunidad de código abierto de MongoDB es muy grande y activa. En realidad, MongoDB se utiliza en muchos productos importantes, como Disney, Craigslist, Foursquare, GitHub y SourceForge. MongoDB es un proyecto de código abierto creado y mantenido por 10gen.com, fundado por ex ejecutivos de DoubleClick. Al mismo tiempo, 10gen también brindó un excelente soporte comercial y participó en la construcción.

MongoDB y NoSQL: Inconvenientes y Ventajas

Como solución NoSQL utilizable, MongoDB tiene muchas ventajas. Recién comencé a entrar en contacto con la base de datos nosql y aprendí una serie de soluciones basadas en Java. Pasé mucho tiempo entendiendo qué es una familia de columnas, la relación entre Hadoop y HBase y qué es ZooKeeper. Cuando finalmente lo descubrí todo, descubrí que Cassandra y HBase son soluciones muy confiables para el mundo NoSQL. Pero en comparación con otras soluciones, MongoDB me permitió comprender muchos conceptos antes de comenzar a escribir código.

Al igual que otros programas, MongoDB también tiene fallos. Después de usar MongoDB por un tiempo, he enumerado algunas cosas que he experimentado y que debo tener en cuenta. Me convertí en "Gotchas":

●No pienses en términos de bases de datos relacionales. Obviamente, MongoDB hace que sea muy fácil crear y ejecutar consultas complejas. Cuando realmente lo uses, te concentrarás principalmente en la eficiencia (como yo).

El índice de MongoDB es un árbol binario. Si no está familiarizado con los árboles B, es posible que desee obtener más información sobre ellos. Todos ellos implican la construcción de métodos de índice que cumplan con los requisitos de proporcionar condiciones de consulta.

Diseñe la estructura del índice con cuidado. Esto involucra el árbol B mencionado anteriormente. Inicialmente, mi índice incluía muchos campos en el documento en caso de que los utilizara. No cometas el mismo error. Tengo un índice de una colección pequeña (alrededor de 100.000 registros) que ha crecido a más de 17 GB, más grande que la colección misma. No debería querer indexar un campo de lista que contenga cientos de entidades.

● MongoDB adopta una forma muy interesante de implementar NoSQL: BSON como almacenamiento, JSON como visualización, JavaScript para gestión y Map/Reduce. Por lo tanto, también causó algunos pequeños problemas, como este (romper la operación de igualdad de números y largos), que pueden continuar apareciendo después de que MongoDB se vuelva popular.

MongoDB, línea de comandos y controlador

MongoDB básicamente utiliza un programa de línea de comandos de cliente JavaScript para gestionar tareas complejas como la integración de datos y el procesamiento simple de información, y está programado completamente en lenguaje JavaScript. En este artículo mostraremos ejemplos del uso de la línea de comandos. Hay una gran cantidad de productos de cliente MongoDB disponibles en la actualidad impulsados ​​por la comunidad MongoDB. Generalmente hay un controlador para cada lenguaje de programación, todos los populares y algunos de los menos populares. Este artículo demuestra el uso del controlador Java para MongoDB y lo compara con una biblioteca ORM (MJORM).

Presentamos mjorm: la solución ORM de MongoDB.

Entre los muchos problemas interesantes que se están resolviendo, una importante tendencia reciente entre los desarrolladores de almacenamiento de datos NoSQL es el mapeo relacional de objetos.

El mapeo relacional de objetos es el mapeo de datos persistentes almacenados en bases de datos relacionales tradicionales a objetos utilizados en aplicaciones. Esto hace que el lenguaje de programación sea más fluido y natural de usar.

La arquitectura orientada a documentos de MongoDB lo hace adecuado para el mapeo relacional de objetos porque los documentos en sí se almacenan como objetos. Desafortunadamente, no hay muchas bibliotecas de mapeo relacional de objetos Java en MongoDB, pero todavía hay algunas, como morphia- (la biblioteca Java de tipo seguro de MongoDB) y Spring-Data (implementación de Spring-Data (SpringData) en MongoDB).

Estas bibliotecas ORM utilizan muchas anotaciones, que no funcionan para mí por algunas razones, una de las cuales es la compatibilidad de estos objetos de anotación en múltiples proyectos. Esto me llevó a iniciar el proyecto mongo-Java-orm o "MJORM" (pronunciado me-yorm), un proyecto de mapeo relacional de objetos Java de MongoDB. MJORM tiene licencia del MIT y se publica bajo Google Code Project. El proyecto está construido por Maven y la biblioteca de componentes de Maven está alojada en el servidor de control de versiones de código de Google. La última versión disponible de MJORM es 0.15, que ya se utiliza en algunos proyectos y entornos de producción.

Comience a usar ORM

Únase al repositorio de MJORM

Los usuarios de Maven primero deben agregar el repositorio Maven de MJORM a pom.xml para que los componentes de MJORM estén disponibles.

Luego añade las dependencias:

De esta forma se puede introducir el código MJORM en la aplicación. Si no utiliza maven, debe descargar manualmente todas las dependencias enumeradas en pom.xml de MJORM. Las dependencias de POJO se han importado y puede comenzar a codificar. Empecemos con el POJO:

Lo que tenemos en este modelo de objetos es que el autor tiene un ID, apellido y nombre, y el libro tiene un ID, ISNB, título, descripción y autor. Es posible que hayas notado que el atributo id del libro es una cadena que se adapta al tipo de ID de objeto de MongoDB. El ID de MongoDB es un valor binario de 12 bytes que se muestra como una cadena hexadecimal. MongoDB requiere que cada documento de la colección tenga una identificación única, pero no requiere que sea un ObjectId. Actualmente, MJORM sólo admite ObjectId, que se muestra como una cadena. También puede observar que Autor no tiene un campo de identificación. Esto se debe a que el libro es su documento principal, por lo que no es necesario que tenga una identificación. Recuerde, MongoDB solo requiere los identificadores de los documentos en la colección de nivel raíz. El siguiente paso para crear un archivo de asignación XML es crear un archivo de asignación XML. MJORM puede convertir documentos MongoDB en objetos. Como demostración, creamos un objeto por documento, ya sea colocando todas las asignaciones en un archivo XML o manteniéndolas separadas.

Author.mjorm.xml:

Book.mjorm.xml:

Estos archivos de mapeo se explican bastante bien. El elemento descriptores es el elemento raíz y debe incluirse en cada archivo de mapeo. Debajo está el elemento de objeto que define la clase correspondiente del documento. El objeto contiene elementos de atributos, que se utilizan principalmente para describir los atributos en POJO y cómo estos atributos corresponden a los documentos en MongoDB. El elemento de propiedad debe contener al menos un atributo de nombre, que es el nombre de la propiedad en los documentos POJO y MongoDB. El atributo de columna es opcional y se utiliza para especificar nombres de atributos opcionales en documentos MongoDB. El atributo id en el elemento de propiedad debe ser el identificador único del objeto. Sólo un elemento de propiedad en un objeto puede contener el atributo id. La configuración de auto hará que MJORM genere automáticamente un valor para esta propiedad durante la persistencia. Puede ver una descripción más detallada del archivo de mapeo XML en la página de inicio del proyecto MJORM de Google Code.

Al integrar POJO y XML, creamos un modelo de datos y un archivo de mapeo para que MJORM pueda descargar POJO desde números de serie y números de deserialización de MongoDB. Podemos hacer algunas cosas interesantes, primero abra el enlace a MongoDB:

El objeto Mongo lo proporciona el controlador Java escrito en 10gen. En el ejemplo, la base de datos mjormIsFun en la instancia local de MongoDB está conectada. A continuación, creamos el ObjectMapper MJORM. Actualmente, la única implementación de ObjectMapper en MJORM es XmlDescriptorObjectMapper, que utiliza estructuras XML para describir información. Es posible que más adelante se agregue soporte para anotaciones u otras definiciones de estructura.

Se creó XmlDescriptorObjectMapper y se agregaron archivos de mapeo. A continuación, cree una instancia del objeto MongoDao proporcionado por MJORM.

Primero, necesitamos obtener la instancia del objeto DB proporcionada por el controlador 10gen. Luego construye MongoDao usando DB y ObjectMapper. Comenzaremos a conservar datos, crear un libro y guardarlo en MongoDB.

Primero cree un objeto Libro y complete el valor, luego llame al método createObject de MongoDao para pasar el objeto Libro a la colección "libros". MJORM convertirá el libro en un DBObject (este es el tipo básico utilizado por el controlador Java 10gen) basándose en el archivo de mapeo xml anterior y guardará un nuevo documento en la colección "libros". Cuando MJORM devuelve un objeto Libro, se completa el atributo id. Tenga en cuenta que, de forma predeterminada, MongoDB no requiere la creación de una base de datos o colección antes de su uso. El sistema la creará automáticamente cuando sea necesario, lo que puede causar algunos problemas. Ver el objeto Libro en la línea de comando de MongoDB es más o menos como sigue:

Veamos cómo usar el método createObject si usamos directamente el controlador Java 10gen en lugar de MJORM:

La consulta para el objeto es el siguiente:

El método readObject lee el documento de la colección especificada basándose en la identificación del documento dado, lo convierte en un objeto (nuevamente usando un archivo de mapeo) y lo devuelve. Los lectores astutos notarán que el libro no identifica a su autor, pero aun así ha sobrevivido. Esto se debe a la insensibilidad de la estructura de MongoDB. No podemos exigir que los documentos de la colección contengan todos los atributos (el atributo id es obligatorio). Todos los libros en MongoDB sin autores están bien. Ahora agregamos un autor al libro y lo actualizamos:

Ahora el libro contiene el autor y persiste en MongoDB. Ahora mire la línea de comando de este libro:

Puede ver que el libro persistente ya contiene el autor. No utilice MJORM para manipularlo nuevamente:

Una discusión en profundidad de los métodos de MongoDao está más allá del alcance de este artículo. Para los usuarios que estén interesados ​​en utilizar MJORM en proyectos reales, se recomienda encarecidamente comprender los documentos relevantes proporcionados por el proyecto MJORM o el uso relevante proporcionado por la interfaz MongoDao.