database performance scalability

database - ¿Puedes recomendar una base de datos que se escale horizontalmente?



performance scalability (13)

¡No te preocupes, vienen buenas soluciones!

Couchdb y Hypertable son de código abierto y todavía en alfa, pero están claramente diseñados para simplificar el escalado de software básico. Funcionan bastante bien y pueden cambiar la manera en que piensas acerca de las bases de datos.

Además, si está bien permitir que alguien más haga la distribución por usted, Google AppEngine y Amazon SimpleDB son servicios de bases de datos distribuidos extremadamente baratos, aunque ambos están en fase beta ahora, por lo que se imponen limitaciones estrictas.

En general, el servidor de la base de datos es la caja más grande y más cara que tenemos que comprar, ya que la escala es la única opción. ¿Existen bases de datos que se escalen bien horizontalmente (es decir, a través de múltiples máquinas de productos básicos) y cuáles son las limitaciones en este enfoque?


Existen técnicas de almacenamiento como JavaSpaces (o una implementación comercial como Gigaspaces) que proporcionan un acceso altamente escalable, rápido y seguro a los objetos.

También hay sistemas de caché distribuidos como memcached, que ofrecen un enfoque similar.

Por supuesto, ninguna de estas son bases de datos verdaderas, pero son cosas que pueden funcionar junto con bases de datos para ofrecer una gran cantidad de escalabilidad horizontal, dada una arquitectura adecuada. El verdadero problema es que si quieres todo el beneficio de ACID que viene con una base de datos, existen ciertas sanciones de rendimiento inevitables. La única salida es descubrir los bits donde no necesita ACID, y usar otras tecnologías para reparar esos bits.


La ruta de Oracle para escalar a través de múltiples máquinas se llama Real Application Clusters (Oracle RAC). No hay fin de documentación sobre esto en otro lugar; puede intentar comenzar en http://www.oracle.com/database/rac_home.html .


MySQL: http://www.mysql.com/why-mysql/scaleout.html

Las limitaciones son que funciona mejor con cargas de trabajo de lectura en su mayoría. Normalmente tiene un ''maestro'' que recibe todas las escrituras y muchos ''esclavos'' que replican las escrituras. Luego, distribuye las lecturas en todas las bases de datos.

La replicación de MySQL es asincrónica, por lo que es probable que tenga que lidiar con problemas de retardo de tiempo (escribe en el maestro y luego lee desde un esclavo antes de que la escritura se haya replicado).


Oracle RAC es el Rolls Royce de bases de datos que permite agregar nodos de hardware extra con relativa facilidad y conmutación por error de hardware.

Sin embargo, los costos de la licencia empeorarán los costos de su hardware básico.

¿Por qué crees que necesitas una escala horizontal? Un servidor central de varias CPU con 40 GB de RAM y almacenamiento SAN puede admitir una instalación de DB muy considerable.

¿Puede proporcionar información sobre el tamaño y la actividad esperada para comprender mejor su problema?


Oracle RAC no es horizontalmente escalable, porque todas las instancias de Oracle comparten el mismo almacenamiento de datos. Sí, con las cosas de SAN puedes obtener una base de datos de gran tamaño, pero simplemente no es escalable. En otras palabras, Oracle RAC sigue siendo un enfoque de escalamiento. Por lo tanto, para escalar horizontalmente o escalar, debe particionar sus datos por función, lo que significa colocar diferentes grupos de tablas en diferentes bases de datos; o partición de sus datos por tabla que significa partición de una tabla en varias subtablas con el mismo esquema, pero almacenar en diferentes bases de datos. De esta forma, obtienes una solución de escalamiento. Hay muchos recursos en eso. Sharding ha sido una palabra de moda durante un tiempo en el blog de arquitectura de sitios web web 2.0. Debido a que Sharding no es soportado directamente por la base de datos en sí, usted debe construir su propia solución. Pero como dije, ya hay muchas lecciones. Para Oracle, la tabla de partición es posible. Para mysql, mira esta pregunta


Oracle Real Application Clusters. Si quieres lo mejor, échale un vistazo.



Si baja por la ruta RAC, vale la pena recordar que no se escala horizontalmente para siempre. Incluso los vendedores dicen que el 90% de los clientes de rac tienen 4 nodos o menos. Una vez que vas más allá, obtienes rendimientos decrecientes. Entonces rac puede funcionar para usted, pero no se garantiza que sea la respuesta.


Si crees seriamente que vas a escalar una caja decente multinúcleo "Big Iron", entonces piensas en particionar tus datos. Esta es una buena forma de agnóstica de base de datos para escalar.

Todas las bases de datos que horizontalmente tendrán un costo serio.

A menos que tenga mega $$ para resolver el problema, olvídese de RAC. Si bien es muy bueno, es MUY caro una vez que escala más allá de 2 nodos.


MongoDB es una de las mejores bases de datos que se escala horizontalmente.


Netezza y otros dispositivos de datawarehouse se escalan de esta manera, pero no son buenos para OLTP y cargas de trabajo de aplicaciones web.


Oracle RAC: clúster de aplicaciones reales

Esto funciona muy bien, solo agrega cuadros a su clúster. Puede pasar de una caja a la otra. No es replicación, todos los cuadros son parte de la misma unidad lógica.

Es bastante caro, por supuesto.