La clave principal de 2.2. Mongodb es "_id" y no se puede indexar en él. Los registros se insertan en el mismo orden en que se almacenan. La clave principal de hbase es la clave de fila, que puede ser cualquier cadena (la longitud máxima es 64 KB y la longitud en aplicaciones reales es generalmente de 10 a 100 bytes). En hbase, las claves de fila se almacenan como matrices de bytes. Al almacenar, los datos se clasifican y almacenan según el orden de bytes de las claves de fila. Al diseñar claves, se debe utilizar al máximo la función de almacenamiento ordenado y las filas que a menudo se leen juntas se deben almacenar juntas.
El resultado de ordenar int en el orden del diccionario es 1, 10, 100, 11, 12, 13, 14, 15, 65438. Para mantener el orden natural de las formas, las claves de fila deben rellenarse con ceros.
3.Mongodb admite índices secundarios, pero hbase en sí no admite índices secundarios.
4.Mongodb admite búsqueda de colección, búsqueda regular, búsqueda de rango, omitir y limitar, etc. Es la base de datos NoSQL más parecida a MySQL, mientras que HBase solo admite tres tipos de búsquedas: acceso por clave de fila única, por rango de claves de fila y escaneo completo de la tabla.
5.5. Las actualizaciones de Mongodb son actualizaciones in situ, es decir, actualizaciones in situ, a menos que los registros de datos actualizados no se puedan alojar en el lugar original. La modificación y adición de hbase son el mismo comando: put. Si la clave de fila pasada por put ya existe, se actualizará el registro original. De hecho, no es una actualización interna de hbase. Simplemente guarda diferentes versiones de esos datos. El número de historial predeterminado de versiones guardadas de hbase es 3.
6.La eliminación de mongodb marcará esta fila de datos como eliminada, porque al eliminar un registro, MongoDB en realidad no elimina el registro de la memoria o el archivo, sino el registro eliminado. Deje los datos en blanco (escriba 0 o un número especial para identificarlo), y poner la dirección del registro en una lista "lista de lanzamiento". La ventaja de esto es que si el usuario desea insertar un registro, Mongodb primero obtendrá la dirección de "registro eliminado" del tamaño adecuado de la "lista de lanzamiento", lo que mejorará el rendimiento (evitando operaciones de memoria malloc). Al mismo tiempo, mongodb también usa la matriz de tamaño del depósito para definir múltiples listas de diferentes tamaños, que se usan para colocar los registros que se eliminarán en la "lista de lanzamiento" apropiada según el tamaño. La eliminación de Hbase primero crea una marca de desecho y luego la fusiona con marcadores de desecho al leer. Los registros de datos eliminados se eliminarán cuando se produzca una compresión importante.
7. Tanto mongodb como hbase admiten mapreduce, pero el soporte de mongodb para mapreduce no es lo suficientemente sólido. Sin utilizar la fragmentación de MongoDB, mapreduce en realidad no se ejecuta en paralelo.
8. Mongodb admite fragmentación y hbase equilibra automáticamente la carga en función de las claves de fila. Aquí, intente elegir campos no incrementales para la clave de fragmentación y la clave de fila, e intente utilizar campos distribuidos uniformemente, porque la fragmentación selecciona el servidor de acceso correspondiente según el rango. Los servidores de hotspot se generan fácilmente si utiliza campos delta. Debido a que la fragmentación se realiza automáticamente según el rango de claves, si las claves se distribuyen de manera desigual, algunas claves no se pueden particionar en absoluto, lo que genera un desequilibrio de carga.
9. Mongodb es más eficiente en lectura que en escritura, y hbase es adecuado para más escritura y menos lectura de forma predeterminada. Se puede configurar a través de hfile.block.cache.size. El caché de lectura configurado ocupa un porcentaje del tamaño del montón, 0,2 significa 20%. Este valor afecta directamente el rendimiento de la lectura de datos. Si escribir es mucho menor que leer, no hay problema en abrirlo en 0,4-0,5. Si la lectura y la escritura están equilibradas, es aproximadamente 0,3. Si escribe más de lo que lee, el valor predeterminado es 0,2. Al establecer este valor, también debe consultar hbase.
servidor de región. Límite superior global de memstore, este es el porcentaje máximo de memstore en el montón. Un parámetro afecta la lectura, el otro afecta la escritura. Si la suma de los dos valores excede el 80-90%, habrá riesgo de OOM, así que configúrelo con cuidado.
10. La idea LSM (Log-Structured Merge-Tree) adoptada por HBase es guardar los cambios en los datos en la memoria y luego fusionar los cambios por lotes en el disco después de alcanzar el subproceso especificado. de modo que la escritura única se convierte en escritura por lotes, lo que mejora enormemente la velocidad de escritura. Sin embargo, en este caso, la lectura será más difícil y la lectura se reducirá significativamente. Mongodb adopta la idea de mapfile+Journal. Si el registro no está en la memoria, primero debe cargarse en la memoria, luego cambiar el registro de registro en la memoria y luego escribir el archivo de datos en lotes a intervalos. Esto requiere mucha memoria, al menos para dar cabida a índices y datos activos.