En noviembre, Raju Suravarjjala(Sr. Director, Couchbase QE & Performance) y yo presentamos "Mindmap: Oracle to Couchbase For Developers". Puedes ver las diapositivas aquí: http://bit.ly/2mPdJfo. El artículo general de la serie está en https://www.couchbase.com/blog/couchbase-oracle-developers-part-2-architecture/. Esta serie está escrita en colaboración con Raju.
Esta es la segunda parte de la serie "Couchbase para desarrolladores de Oracle" que discute la arquitectura de alto nivel de las dos bases de datos desde la perspectiva de un desarrollador. El blog asume que tienes conocimiento de Oracle y no explica las características de Oracle, excepto por razones de comparación y contraste. Esta comparación y contraste es sólo para eso. No pretende evaluar una característica o rendimiento frente a otra.
Tanto Oracle como Couchbase se desarrollaron para gestionar trabajos específicos de aplicaciones empresariales. Ambos se han expandido y se están expandiendo. Coexisten en las empresas. Es con esta sensibilidad, que estamos proporcionando una comparación de estos productos para ayudar a los desarrolladores de Oracle a entender lo que es Couchbase.
Pasemos ahora a la arquitectura.
Tema | Oracle | Couchbase |
Despliegue de un solo nodo | Oracle es una base de datos monolítica de instancia única (en el despliegue mostrado en 1). De hecho, se desarrolló originalmente para ejecutarse en una sola máquina y funciona bien en una máquina SMP (multi-socket, multi-core). Todas las capas de una base de datos (lógica, gestión del espacio físico, bloqueo, registro, se gestionan desde una única máquina). El código se ejecuta en un único subproceso (o subprocesos cooperativos) con bloqueo de recursos diseñado para una única máquina.
Esta configuración es la mayoritaria en el despliegue de desarrollo y producción. Cuando te quedas sin capacidad de disco, añades capacidad. Cuando te quedas sin capacidad de CPU, migras la carga de trabajo a una máquina más grande con más sockets, más núcleos. O, hoy en día, a máquinas virtuales o contenedores más grandes. La APP para la comunicación con el servidor utiliza el protocolo propietario oracle. Los SDK de nivel superior funcionan sobre este. |
El servidor Couchbase se puede instalar en un único servidor y normalmente se instala en un único nodo (MacOS, Linux o Windows) para el desarrollo. Todas las funciones de la base de datos se abstraen en servicios (capa de datos, índice, consulta, con APIs para acceder a los datos directamente o mediante consulta). Estos servicios se coordinan para exponer los servicios a través de REST API. Las aplicaciones utilizan Couchbase SDKs (disponible en todos los lenguajes populares) para obtener datos, crear índices, ejecutar consultas N1QL.
Esta configuración se utiliza principalmente para el desarrollo en su ordenador portátil, VM o un contenedor. Rara vez o nunca se utiliza en el despliegue. De hecho, Couchbase te avisa cuando has desplegado en un solo nodo, ¡solo hay una copia de tus datos! La API para la comunicación con el servidor es a través de la API REST y el protocolo binario Memcached. Todos los demás SDK de nivel superior utilizan protocolos REST o Memcached por debajo. |
Idiomas | SQL, PL/SQL,XQuery, SES (Búsqueda Empresarial Segura) | N1QL (SQL para JSON), Acceso directo a datos, FTS (búsqueda de texto completo). |
Conexiones | Conexión persistente entre el proceso de usuario y el proceso/hilo de base de datos que se ejecuta en nombre de la aplicación cliente. | Conexión HTTP sobre TCP/IP. Conexión para MemcachedCada solicitud de obtención/modificación de datos, consulta es una solicitud distinta. Utilizamos TCP y HTTP keep-alive para que la solicitud de conexión sea eficiente. |
Sesión | Una sesión comienza desde CONNECT hasta QUIT. Cada "sesión" de aplicación tiene una sesión correspondiente en el servidor Oracle. Dentro de una sesión, se puede ejecutar una consulta o un millón de consultas que abarquen varias transacciones. | Al igual que en connection, en Couchbase, cada petición es una petición distinta. Cada petición tiene que llevar tanto parámetros bind como cualquier parámetro de contexto (por ejemplo, timeout). Una vez procesada la petición, el contexto de sesión desaparece del servidor.
Sin embargo, nada impide que los SDK recuerden el contexto y los parámetros y los transmitan en peticiones posteriores sin intervención de la aplicación, lo que facilita la codificación. |
Usuario, autenticación | Soporta usuario OS, usuario de base de datos. La autenticación se puede hacer por OS, base de datos, terceros como LDAP, kerberos. | Soporta usuario OS, usuario de base de datos. La autenticación se puede hacer por OS, base de datos, terceros como LDAP, kerberos. |
Base de datos | Por debajo de la instancia, la base de datos es la unidad de gestión de datos y control de acceso de nivel superior para usuarios y aplicaciones.
Una instancia de Oracle puede tener varias bases de datos. |
Una instancia de Couchbase puede tener hasta 10 BUCKETS. A cada bucket se le asigna una cantidad fija de memoria (en cada nodo). Se utiliza para almacenar en caché los datos en los nodos de datos. Piensa en ello como el buffer pool para los datos en Oracle.
En cada bucket se almacenan documentos JSON. Cada documento JSON de un mismo bucket debe tener una clave única (similar a la clave primaria de las tablas). Dentro de cada cubo, puede tener varios tipos de documentos (como tablas y colecciones). Para permitir la unicidad e identificar el tipo de documento con sólo mirar la clave, anteponemos a la clave del documento el tipo de documento. Por ejemplo: "cust.x817.022.4u2" { "type": "cust", "lname": "Smith"} |
Cuadro | Cuadro | Tipos de documentos dentro de un bucket. Los documentos de clientes (con prefijo cust) se convierten en un grupo lógicamente y los documentos de piezas también se convierten en un grupo. No hay separación física, salvo en el contexto de un índice y una consulta. |
Columna | Columna | Todos los documentos en Couchbase tienen que ser documentos JSON conformes a http://json.org/ Considere un simple documento JSON de 1 nivel. Clave de documento: "cust:2984" Doc: {"a":1, "b": True, "c": "Hola"} En su mapa mental, puede pensar en este documento como una fila, los atributos individuales, "a", "b", "c" como columnas, la clave del documento como clave primaria. JSON puede contener arrays y objetos, arrays de objetos, objetos que contienen arrays. Los nombres de los atributos se referencian de arriba hacia abajo (piense en los objetos en Oracle.Esto se discutirá en detalle en la sección "Tipos de base de datos". |
Estructuras de esquema lógicas y físicas. | ||
SDKs | http://bit.ly/20TCGn0 | https://www.couchbase.com/downloads (desplácese hacia abajo hasta SDKs) |
Arquitectura multinodo (Despliegue homogéneo). |
||
Despliegue multidimensional | No disponible. Cada nodo en Oracle RAC tiene plena capacidad Oracle SQL incluyendo la capacidad transaccional y administrativa. |
Cada nodo del clúster puede tener una o varias combinaciones de los servicios: Datos, Consulta, Índice, Búsqueda y Análisis. El gestor del clúster (coordinador) conoce la distribución y disponibilidad de los servicios e informará a los servicios entre sí. El SDK también es consciente de la distribución de datos, consulta y nodos FTS. El SDK intenta equilibrar la carga de trabajo entre los distintos nodos de consulta para la carga de trabajo de consulta, los nodos de datos para la carga de trabajo de datos/KV, los nodos FTS para la carga de trabajo de búsqueda. |
Arquitectura del sistema | La implantación en un único nodo es adecuada para SMP. El despliegue multi-nodo comparte el mismo disco/almacenamiento. De ahí lo de Sistema de Disco Compartido. Se puede escalar hasta cierto punto añadiendo más computación y compartiendo el mismo disco. A la larga, el disco compartido y el rendimiento de E/S se convierten en el cuello de botella.El desarrollador es ajeno (en su mayor parte) al tipo de instancia: nodo único o RAC multinodo. Oracle ha desarrollado un sofisticado gestor de bloqueos distribuidos, sincronización de buffer pool, etc. para conseguirlo. Requiere el costoso infiniband para reducir cualquier efecto negativo en el rendimiento. A pesar de ello, no es infrecuente particionar la carga de trabajo entre varios nodos RAC para minimizar los conflictos en el bloqueo, etc. |
Un único nodo puede ampliarse, implementado como servicios múltiples cooperativos que se ejecutan en un único sistema. La coordinación se realiza mediante el paso de mensajes, incluso en un único sistema.
Este conjunto de servicios poco acoplados se presta a escalarse sin problemas. Puedes tener todos los servicios en cada nodo y simplemente añadir nuevos nodos con los mismos servicios. Todos los servicios entenderán la topología multinodo. Esto se conoce como escalabilidad horizontal. Las aplicaciones no utilizan todos los servicios de manera uniforme. Los cuellos de botella pueden estar en los datos, el indexador de la consulta. Así, en Couchbase, se dimensionan y añaden nuevos nodos simplemente para ejecutar los servicios con cuellos de botella. Esto proporcionará una utilización óptima de los recursos y un mejor rendimiento en comparación con un despliegue homogéneo. También reducirá tus costes. El escalado multidimensional es fácil de desplegar como cualquier otra configuración y la manejabilidad sigue siendo la misma. |
Consulta | Oracle tiene soporte completo de SQL. Las extensiones SQL incluyen soporte para JSON y búsqueda de texto. Oracle también dispone de XML DB, compatible con XML, XQuery, SQL/XML, etc. |
Couchbase puede almacenar binarios y JSON. Las API para desarrolladores pueden GET y SET documentos, subdocumentos directamente. N1QL (SQL para JSON) proporciona un lenguaje declarativo. Viene con índices y un motor de consulta completo para ejecutar consultas de manera eficiente. Más información en: query.couchbase.com. Couchbase FTS (Full Text Search) te ayuda a crear índices y búsquedas de texto. http://bit.ly/2vbcbOF |
Alta disponibilidad | MAA (Maximum Availability Architecture) de Oracle recomienda: "En la pantalla de configuración del Cluster, en la sección Disk Group Details, MAA recomienda elegir Oracle Automatic Storage Management (ASM) HIGH redundancy para TODOS los grupos de discos (DATA y RECO) para obtener la mejor protección y la mayor simplicidad operativa"
Oracle permite crear servidores en espera en caliente, replicación basada en esquemas, captura de cambios y probablemente mucho más. |
Dentro de un mismo cluster, puedes tener múltiples copias de datos e índices con sólo especificar el número de copias que deseas tener. Puedes tener hasta 3 copias de los datos y cualquier número de copias del índice.
A través de múltiples clústeres, puede replicar los datos con XDCR integrado (replicación entre centros de datos). |
Transacciones | ÁCIDO
Declaración múltiple |
Atomicidad de un solo documento Consistencia del Servicio de Datos, Índice - consistencia eventual bloqueo optimista (CAS) confirmación adicional de durabilidad |
Conductores | JDBC, ODBC, .NET, LINQ y mucho más | SDK de Couchbase (Java, .NET, LINQ, PHP, Python, Go), Simba JDBC/ODBC |
Modelo de datos | Admite modelos de datos normalizados y desnormalizados. | Modelo JSON desnormalizado (agregado). Se pueden representar y procesar relaciones entre varios tipos de documentos (por ejemplo, pedidos a clientes). Tanto el hijo (pedidos) como el padre (cliente) pueden almacenar la clave primaria de los documentos relacionados y luego UNIRLOS. Esta relación está implícita, no codificada por una restricción (por ejemplo, Foreign Key Constraint) en Couchbase. Esta es la razón por la que Couchbase es más flexible. |