sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo comparar MongoDB con YCSB?

Al hablar de las características de rendimiento del sistema, la mayoría de los proveedores de DBaaS se limitan a proporcionar información sobre el hardware en el que se aprovisionan sus sistemas. De hecho, es difícil hablar con precisión sobre las características reales de rendimiento/latencia de una implementación basada en la nube dada la cantidad de variables en dicho sistema. Entornos virtualizados, cargas de trabajo impredecibles, latencias de red, diferentes geografías son solo algunas de las consideraciones.

Sin embargo, es una buena idea tener una comprensión justa del rendimiento real de su implementación de MongoDB:para que pueda aprovisionar con precisión en función de las necesidades de su aplicación; de modo que pueda comparar varios proveedores de DBaaS para asegurarse de que está obteniendo el máximo rendimiento de su inversión.

Este blog es una introducción a la ejecución de algunos puntos de referencia básicos de rendimiento en su clúster de MongoDB. Entra en los detalles de cómo configurar y ejecutar las pruebas comparativas de YCSB e interpretar los resultados. La inspiración provino del reciente blog de MongoDB sobre mejoras de rendimiento en MongoDB 3.0.

YCSB es un popular conjunto de programas y especificaciones de código abierto de Java desarrollado en Yahoo! para comparar el rendimiento relativo de varias bases de datos NoSQL. Sus cargas de trabajo se utilizan en varios estudios comparativos de bases de datos NoSQL.

Configuración de YCSB

Esta y otras secciones posteriores lo guiarán a través de un proceso paso a paso para instalar, configurar y ejecutar pruebas YCSB en su sistema de proveedor de DBaaS favorito.

Para ejecutar pruebas de carga de trabajo, necesitará una máquina cliente, preferiblemente en la misma ubicación geográfica que su clúster MongoDB para evitar latencias a través de Internet. Seleccione una configuración que tenga una cantidad decente de jugo para ejecutar varios subprocesos para cargar su clúster Mongo de manera adecuada. La máquina debe tener instalada una versión reciente de Java, Maven y git.

Pasos:

  • Si Java, Maven o git aún no están instalados en su sistema, instálelos. Consulte la documentación disponible para su sistema operativo específico. Asegúrese de instalar una versión de Maven compatible con su versión de Java. Prueba que todas las dependencias funcionan correctamente. Por ejemplo,
$ javac -version
javac 1.8.0_25
$ mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
$ git --version
git version 1.9.5 (Apple Git-50.3)
  • Como sugiere la página de Github de YCSB, puede obtener el archivo tar de YCSB. Pero recomendamos construirlo desde la fuente. Los pasos están documentados en MongoDB README de YCSB. Esto nos ayudará a habilitar la autenticación de MongoDB para su proveedor de nube más adelante.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Nota:si su `mvn clean package` o `mvn clean install` El comando falla debido a errores al ubicar el paquete "mapkeeper", elimine o comente las 2 instancias de las entradas "mapkeeper" en el pom.xml a nivel de raíz. Consulte este problema de Github para obtener más información.
  • Una vez que la compilación se haya realizado correctamente, ¡estará listo para ejecutar las pruebas YCSB!

Habilitación de la autenticación

La mayoría de los proveedores de MongoDB brindan autenticación de MongoDB de forma predeterminada y no hay forma de desactivarla. Desafortunadamente, YCSB actualmente no admite la autenticación MongoDB. La implementación del cliente en sí utiliza principalmente, ahora, llamadas API obsoletas. Para satisfacer nuestras necesidades, agregamos una nueva propiedad YCSB específica de MongoDB, 'mongodb.auth' junto con algunas líneas de código para apoyarlo. Los cambios son muy simples y se puede encontrar una diferencia aquí. Las propiedades predeterminadas de YCSB específicas de MongoDB se enumeran aquí.

Vuelva a compilar el paquete usando mvn de nuevo una vez que los cambios estén completos. Consulte la sección anterior sobre cómo compilar YCSB con Maven.

Ejecución de las pruebas

Esta sección de la wiki de YCSB enumera las actividades siguientes y subsiguientes en detalle. Los describiremos aquí brevemente junto con otros consejos.

  • El siguiente paso es elegir el tipo de carga de trabajo que desea ejecutar. Tómese el tiempo para leer y comprender la sección Cargas de trabajo principales de la wiki de YCSB. Se resumen aquí:
    • Carga de trabajo A:Actualizar gran carga de trabajo:50/50 % de combinación de lecturas/escrituras
    • Carga de trabajo B:carga de trabajo principalmente de lectura:95/5 % de combinación de lecturas/escrituras
    • Carga de trabajo C:solo lectura:100 % de lecturas
    • Carga de trabajo D:leer la última carga de trabajo:más tráfico en inserciones recientes
    • Carga de trabajo E:rangos cortos:consultas basadas en rangos cortos
    • Carga de trabajo F:lectura, modificación y escritura:lectura, modificación y actualización de registros existentes
  • Obviamente, las cargas de trabajo individuales se pueden modificar mediante las propiedades principales. Es posible que desee elegir una carga de trabajo y modificar las propiedades para que coincidan con algo que coincida con las características de su aplicación. (Este estudio comparativo eligió un montón de cargas de trabajo "modificadas" interesantes). Además, consulte el blog de MongoDB que mencionamos en la primera sección. (Nuestra prueba seleccionará la carga de trabajo A con índices de lectura/actualización predeterminados).
  • Elija el número de operaciones (propiedad ‘operationcount’) para que la prueba en sí se ejecute durante un período de tiempo adecuado. Las pruebas que finalizan dentro de los 30 minutos no pueden ser buenos indicadores del rendimiento general del sistema.
  • Elija el número apropiado de subprocesos que debe ejecutar YCSB. Esto realmente depende de qué tan buenas sean sus máquinas cliente, cuánta carga puede soportar su clúster MongoDB y qué tan representativa es de su aplicación real. Ejecutaremos nuestras pruebas comparativas en una variedad de subprocesos.
  • Ejecute la fase de carga. Elija un recuento de registros (Property 'recordcount') para insertar en la base de datos que esté cerca del número de operaciones que pretende ejecutar en él. Elija un número adecuado de hilos para que la inserción no tarde demasiado. Por ejemplo,
    ./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
     mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p 
    mongodb.auth="true"
    
    • load La bandera indica que se trata de una ejecución de carga.
    • s ‘la bandera imprime el estado a intervalos de 10 segundos
    • recordcount ' se establece en 10 millones.
    • threads ‘establece el número de subprocesos del cliente en 16.
    • mongodb.auth ‘ es la propiedad que escribimos para habilitar la autenticación de MongoDB.
  • Recuerda
    • Redirige la salida estándar a un archivo.
    • Usar ‘screen ' o un método equivalente para que su sesión no se pierda mientras ejecuta estas operaciones
  • Una vez que se completa la fase de carga de datos, está listo para ejecutar sus cargas de trabajo. Por ejemplo,
./bin/ycsb run mongodb -s -P workloads/workloada -p 
mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p
 mongodb.auth="true" -p operationcount=10000000 -threads 2
  • Repita las ejecuciones con varios números de subprocesos. Recuerda redirigir los resultados para que puedas compararlos más tarde. Por ej. repetimos nuestras pruebas para 2, 4, 8, 16 y 32 hilos.

Análisis de resultados

La sección final de esta página wiki de YCSB habla sobre el análisis de resultados. Los bits de información más interesantes son el rendimiento general y las latencias percentiles del 95/99 %. Por lo general, aumentar la cantidad de subprocesos aumenta el rendimiento hasta el momento en que las ganancias se aplanan y las latencias se vuelven inaceptables. Por ej. aquí hay una gráfica de Rendimiento y Latencia versus # de subprocesos para un sistema de prueba que estábamos tratando de comparar. La carga de trabajo seleccionada fue la carga de trabajo A y alrededor de 3 millones de operaciones.

Se puede concluir a partir del gráfico que 16 subprocesos es probablemente el "punto óptimo" desde el punto de vista de la carga para este servidor MongoDB:más allá, la línea de rendimiento es plana incluso para un crecimiento exponencial en el número de subprocesos, mientras que las latencias crecen hasta volverse inaceptablemente grandes.

Algunos consejos:

  • Para obtener una mejor imagen del rendimiento del sistema en la nube, automatice y luego repita estas pruebas en varios momentos del día. Hemos notado que las características de rendimiento pueden variar significativamente a lo largo del día.
  • Al comparar dos posibles proveedores de DBaaS, asegúrese de seleccionar sus máquinas cliente y el clúster de DBaaS en la misma geografía. Los clústeres deben tener una configuración similar. Además, recuerde realizar las pruebas varias veces al día.

Qué sigue

Aquí hay algunas cosas que tenemos la intención de investigar a medida que hacemos más trabajo en esta área:

  • Ejecución de cargas de trabajo desde varias máquinas en paralelo:al intentar cargar un clúster MongoDB de alta capacidad, una sola máquina cliente no será suficiente. Actualmente, YCSB no proporciona una forma sencilla de ejecutar cargas de trabajo desde varias máquinas en paralelo. Sin embargo, se puede hacer manualmente. Esto también será útil cuando intente cargar datos en un clúster grande.
  • Tamaño del conjunto de datos:el tamaño de la base de datos en comparación con la memoria de los sistemas MongoDB cambiará las características absolutas de rendimiento/latencias, dado que para conjuntos de datos más grandes, MongoDB tendrá que acceder al disco .
  • Tamaño de registros individuales:será interesante para las características de rendimiento cuando los tamaños de registro son grandes, especialmente cuando está cerca del tamaño de registro máximo admitido. Esto podría ser crucial para las aplicaciones que realizan principalmente operaciones de lectura, modificación y reescritura (como Workload F).
  • Controladores alternativos de MongoDB:dado que actualmente estábamos interesados ​​en comparar dos proveedores de DBaaS diferentes, no intentamos usar controladores de base de datos más eficientes. Obviamente, se pueden lograr números absolutos mucho mejores con los controladores más recientes y más eficientes. Esto será interesante para las aplicaciones que intentan extraer la última gota de jugo de su sistema. Este blog habla sobre las medidas de mejora del rendimiento a través de YCSB mediante el uso de un controlador MongoDB asíncrono.
  • Herramientas alternativas de evaluación comparativa:Sysbench para MongoDB es una que encontramos interesante. Estamos mirando a los demás.