Ceci est un problème relativement complexe auquel je pense, alors s'il vous plaît suggérer des modifications ou des commentaires sur les parties où vous n'êtes pas clair. Je vais mettre à jour et itérer en fonction de vos commentairesGem qui permet l'accès aux données en utilisant des bases de données mysql partagées tout en maintenant l'utilisation de Activerecord
Je pense à un développement d'une gemme rails qui simplifie l'utilisation des tables partagées, même lorsque la plupart de vos données sont stockées dans des bases de données relationnelles. Je crois que cela est similaire au concept utilisé dans Quora ou Friendfeed quand ils touchent un mur avec mysql traditionnel, avec la plupart des solutions potentielles nécessitant une migration massive (nosql), ou tout simplement être vraiment douloureux (coller complètement relationnel)
- http://bret.appspot.com/entry/how-friendfeed-uses-mysql
- http://www.quora.com/When-Adam-DAngelo-says-partition-your-data-at-the-application-level-what-exactly-does-he-mean?q=application+layer+quora+adam+
Essentiellement, comment pouvons-nous continuer à utiliser MySQL pour beaucoup de choses, il est vraiment bon, tout en permettant des parties du système à l'échelle? Cela permettra à quelqu'un de commencer à utiliser mysql/activerecord, mais d'atteindre une mise à l'échelle du roadblock pour facilement mettre à l'échelle les parties de la base de données qui ont du sens. Pour nous, nous utilisons Ruby on Rails sur une base de données partitionnée, et stockons des blobs JSON dans ceux-ci. Puisque nous ne pouvons pas faire de jointures, nous créons des tables pour les relations entre entités.
Par exemple, nous avons 10 types d'entités différents. Chaque entité peut être liée les unes aux autres à l'aide de grandes tables de relations (partagées).
Les tableaux sont extrêmement simples. Les index sont (Id1, Id2 ..., type) et les données sont stockées dans le blob JSON.
- Id, type, {données JSON}
- Id1, ID2 type {données JSON}
- Id1, ID2 Id3, type {données JSON}
Nous avons mis beaucoup de travail dans la création d'interfaces de plus haut niveau pour stocker une série d'ensembles de données relationnelles
Pour un type donné, vous pouvez définir un type de stockage - (valeur, liste non pondérée, listes pondérées, listes pondérées avec guids)
Nous avons des interfaces de haut niveau pour chacun d'entre eux - l'interrogation, le tri, la comparaison d'horodatage, les intersections, etc.
De cette façon, si quelqu'un se rend compte qu'ils ont besoin à l'échelle d'une partie spécifique de la base de données, ils peuvent garder la plupart de leur infrastructure, et déplacer seulement les tables dont ils ont besoin dans cette base de données partagée
Que pensez-vous? Comme mentionné ci-dessus, j'aimerais savoir ce que vous pensez