¿Qué tan rápido es Berkeley DB SQL comparado con SQLite?


Oracle lanzó recientemente un back-end de Berkeley DB para SQLite. Resulta que tengo una base de datos SQLite de cientos de megabytes que podría muy bien beneficiarse de "rendimiento mejorado, concurrencia, escalabilidad y fiabilidad", pero el sitio de Oracle parece carecer de cualquier medidas de las mejoras. ¿Alguien ha hecho alguna evaluación comparativa?

Author: dan04, 2010-05-13

3 answers

Participé en la evaluación beta del código BDB SQLite y uno de los las cosas que intenté controlar fueron la diferencia de rendimiento. En este punto, No puedo publicar exactamente lo que encontré hasta que tenga al menos a otra persona evaluar mi código, ejecutar las pruebas, y confirmar los números que tengo (que está siendo hacer). Sin embargo, puedo generalizar aquí y decir que hay casos en los que BDB ofrece mejoras de rendimiento significativas sobre SQLite, específicamente en el área de manejo pesado cargas que implican concurrencia de escritura.

Hay, generalmente, dos medidas de" rápido " correcto efficiency (1) eficiencia: cuánto tiempo tarda un único proceso para hacer XYZ vs (2) concurrencia: ¿cuántas veces pueden muchos procesos hacer XYZ por unidad de tiempo. El principal problema que aborda BDB es concurrencia processing procesamiento de transacciones a gran escala. Así que piensas en muchos conexiones concurrentes escribiendo y / o modificando el contenido de la base de datos.

SQLite por diseño utiliza el bloqueo a nivel de base de datos hay un máximo de uno escritor que puede estar trabajando en la base de datos a la vez. Por lo tanto, la transacción de SQLite tasa se mantiene más o menos constante con el número de conexiones concurrentes, por lo que su escalabilidad en aplicaciones de escritura intensiva se mide realmente por su eficiencia (1).

BDB, por otro lado, utiliza el bloqueo de nivel de página, que permite a varios escritores estar trabajando en la base de datos en un momento dado (siempre que estén trabajando en páginas separadas). Por lo tanto, la tasa de BDB potencialmente aumenta con el número de conexiones y por lo tanto su escalabilidad es tanto una cuestión de eficiencia (1) y concurrencia (2), que puede sumar.

Principalmente a lo que se reduce es a (escritura) concurrencia. BDB puede empujar más TPS que SQLite para múltiples escritores. Por transacción, me refiero a algo que modifica la base de datos (¿cómo son de ayuda real para las operaciones de solo lectura?). Dicho esto, para la concurrencia de lectura (aplicaciones que principalmente hacen SELECTs), SQLite podría muy bien ir head to head con BDB porque el bloqueo ya no es un problema crítico.

En cuanto al tamaño del conjunto de datos, no estoy seguro. No he mirado en que. En última instancia, ambos utilizan árboles B para el almacenamiento. Puede haber factores en sus respectivas implementaciones a considerar, pero no he investigado eso. Me sepa que SQLite puede manejar con elegancia conjuntos de datos en cientos de MBs y GBs de dos dígitos (y quizás más ahora que la implementación del mapa de página sucia ha cambiado).

Por lo tanto, si tiene una solicitud que emplea muchas conexiones que modifican una base de datos dada y la contención de la página es relativamente baja, entonces BDB puede ofrecer mejoras significativas en el rendimiento. Pero la contención de la página es un variable. En el límite, si usted tenía una base de datos BDB cuyos datos consistían en un una sola página, entonces su rendimiento coincidiría con el de SQLite en todos los casos porque el bloqueo a nivel de página aquí degenera efectivamente en el equivalente de bloqueo a nivel de base de datos everybody todo el mundo está peleando por una cosa. Sin embargo, como el número de páginas aumenta en BDB (y la contención de la página disminuye), entonces el el TPS máximo comenzará a crecer con el número de conexiones simultáneas. Entonces a partir de ese momento, la memoria se convierte en el siguiente factor limitante. Pero eso es otro historia.

Por cierto, estoy en el proceso de escribir un artículo sobre el uso de BDB para los que vienen de SQLite.

Enlaces de artículos:

Oracle Berkeley DB SQL API vs. SQLite API-Una evaluación técnica

Oracle Berkeley DB API SQL vs. API SQLite-Integración, Beneficios y diferencias

 56
Author: Mike Owens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-13 19:46:20

Esa es una pregunta un poco cargada. Los resultados variarían drásticamente dependiendo de las velocidades de acceso a su disco, el tamaño de la caché en la memoria, el número de inserciones vs.lecturas, divisiones de página, concurrencia, etc, etc, etc.

En general, BerkeleyDB puede ser extremadamente rápido: Recientemente diseñé una plataforma de análisis de datos para un empleador que era capaz de hacer inserciones de 40k por segundo en un sistema x86 de 8 núcleos (mientras que al mismo tiempo hacía miles de lecturas por segundo) con un conjunto de datos Rango de 30G. Esto fue con total protección transaccional.

Ese fue el mejor de los casos, sin embargo, hubo momentos en que las inserciones podían caer a tan solo 2k por segundo, dependiendo de los datos entrantes y lo que se almacenaba actualmente en Berkeley. El rendimiento disminuye significativamente si tiene una E/S de disco lenta y una tasa de visitas de caché pobre o si está expandiendo constantemente la base de datos causando que se produzcan divisiones de página. También hay una enorme cantidad de ajustes que puede hacer para aumentar el rendimiento de su conjunto de datos en particular.

En general, es un sistema excelente, pero la documentación y el conocimiento son bastante escasos. Recomiendo El libro de BerkeleyDB como probablemente la mejor referencia disponible actualmente.

 11
Author: Brian Roach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-08 23:12:08

Además del libro de la Base de datos de Berkeley que menciona Brian, también puede encontrar los siguientes recursos útiles:

  • Los foros en línea de la Base de datos de Berkeley pueden proporcionar muchas sugerencias tanto de los usuarios como de los desarrolladores del producto. Ver Berkeley DB forum ,
  • El conjunto de documentación de la base de datos de Berkeley, que se puede encontrar aquí. En particular, hay varias secciones en la Guía de referencia que cubren el ajuste, el rendimiento y el rendimiento.
 7
Author: David Segleau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-27 20:15:03