¿Cuál es la mejor forma de manejar una base de datos fragmentada en Rails? ¿Debería manejarse la fragmentación en la capa de aplicación, la capa de grabación activa, la capa de controlador de la base de datos, una capa de proxy o algo completamente diferente? ¿Cuáles son los pros y los contras de cada uno?División de datos y rieles
Respuesta
FiveRuns tienen una joya llamada DataFabric que hace sharding a nivel de aplicación y replicación maestro/esclavo. Vale la pena echarle un vistazo.
En mi opinión, la forma más simple es mantener un 1: 1 entre instancias de rieles y fragmentos de DB.
Para aquellos como yo que no habían oído hablar de sharding:
http://highscalability.com/unorthodox-approach-database-design-coming-shard
Supongo que con fragmentos estamos hablando de particiones horizontales y no particiones verticales (here are the differences on Wikipedia).
En primer lugar, dividir la partición vertical tan lejos como pueda tomar antes de considerar la partición horizontal. En Rails es fácil tener diferentes modelos que apunten a diferentes máquinas y para la mayoría de los sitios de Rails, esto te llevará lo suficientemente lejos.
Para particionar horizontalmente, en un mundo ideal, esto se manejaría en la capa de aplicación en Rails. Pero aunque no es difícil, no es trivial en Rails, y para el momento en que lo necesite, por lo general, su aplicación ha crecido más allá del punto donde esto es factible ya que tiene llamadas ActiveRecord rociadas por todos lados. Y a nadie, a los desarrolladores ni a la administración, le gusta trabajar en él antes de necesitarlo, ya que todos preferirían trabajar en funciones que los usuarios usarán ahora en lugar de particionar, lo que puede no entrar en juego durante años después de que su tráfico haya estallado.
capa ActiveRecord ... no es fácil de lo que puedo ver. Requeriría muchos parches de monos en los internos de Rails.
En Spock terminamos el manejo de este encargo usando un MySQL Proxy y de código abierto en SourceForge como Spock Proxy. ActiveRecord cree que está hablando con una máquina de base de datos MySQL cuando la realidad está hablando con el proxy, que luego habla con una o más bases de datos MySQL, combina/ordena los resultados y los devuelve a ActiveRecord. Requiere solo algunos cambios en su código de Rails. Eche un vistazo a la página de Spock Proxy SourceForge para más detalles y nuestras razones para seguir esta ruta.
+1 para estirar la partición vertical en el nivel de la tabla. Con ActiveRecord, es bastante sencillo dividir las tablas en varias tablas con menos columnas para aislar los datos "calientes" de otros datos. Esto hace una gran diferencia si estás usando MySQL. – casey
La conexión de raíles a múltiples bases de datos no es un gran problema; simplemente tiene una subclase de ActiveRecord para cada fragmento que anula la propiedad de conexión. Eso hace que sea bastante simple si necesita realizar llamadas con varios fragmentos. Luego solo tiene que escribir un pequeño código cuando necesite hacer llamadas entre los fragmentos.
No me gusta la idea de Hank de dividir las instancias de los rieles, porque parece difícil llamar el código entre las instancias a menos que tenga una gran biblioteca compartida.
También debería ver algo como Masochism antes de comenzar a fragmentar.
Para rieles para trabajar con entorno replicado, se recomienda usar my_replication plugin que ayuda conexión de base de cambiar a uno de los esclavos en tiempo de ejecución
- 1. División y puntos flotantes
- 2. Evitar división de cerebro, votos y quórum
- 3. división y concatenar una cadena
- 4. C división entera y piso
- 5. División de guión y de punto flotante
- 6. cómo importar datos en rieles?
- 7. /euclidiana número entero división de la división
- 8. Rieles de base de datos valores booleanos
- 9. Rieles: almacenamiento de datos cifrados en la base de datos
- 10. Validación de datos serializados de rieles
- 11. División visual de datos en dos clases en matlab
- 12. Migraciones de rieles: Cargar datos predeterminados
- 13. Rieles: base de datos separada por subdominio
- 14. Rieles: ¿dónde colocar los archivos de datos?
- 15. División de dataframe utilizando dos columnas de datos y aplicar transformación común en la lista de marcos de datos resultantes
- 16. Combinación RESTful y división del recurso
- 17. Diseño de base de datos SaaS - ¿Bases de datos múltiples? ¿División?
- 18. Rieles: Paperclip y avances?
- 19. rieles y OpenURI
- 20. Entender los fundamentos de JSONP y rieles
- 21. QString División
- 22. División de números grandes
- 23. simple división
- 24. Exportar datos a CSV en rieles
- 25. Perl patrón de división
- 26. NLog División de archivos
- 27. División de montón y administrador de memoria de Windows
- 28. ¿Cómo convierto la división horizontal a la división vertical y viceversa en Emacs?
- 29. JS - División de una cadena y bucle de resultados
- 30. de estilo Python división de enteros y módulo en C
https://github.com/mperham/ data_fabric es la nueva URL –
"Bob está a cargo ahora": https://github.com/bpot/data_fabric –