【问题标题】:Gem that allows for data access using sharded mysql databases while maintaining the usage of Activerecord允许使用分片 mysql 数据库访问数据同时保持 Activerecord 使用的 Gem
【发布时间】:2011-04-05 05:55:09
【问题描述】:

这是我正在考虑的一个相对复杂的问题,因此请对您不清楚的部分提出编辑或评论。我会根据你的 cmets 更新迭代

我正在考虑开发一个 Rails gem,它可以简化分片表的使用,即使您的大部分数据都存储在关系数据库中。我相信这类似于 Quora 或 Friendfeed 中使用的概念,当他们遇到传统 mysql 的扩展时,大多数潜在的解决方案都需要大规模迁移(nosql),或者只是非常痛苦(完全坚持 w 关系)

本质上,我们如何才能继续使用 MySQL 做很多它真正擅长的事情,同时允许系统的某些部分扩展?这将允许有人开始使用 mysql/activerecord,但遇到了扩展的障碍,以便轻松扩展数据库中有意义的部分。

对于我们来说,我们在分片数据库上使用 Ruby on Rails,并在其中存储 JSON Blob。由于我们无法进行连接,因此我们正在为实体之间的关系创建表。

例如,我们有 10 种不同类型的实体。每个实体都可以使用大(分片)关系表相互链接。

表格非常简单。索引为 (Id1, Id2..., type),数据存储在 JSON blob 中。

  • ID、类型、{json 数据}
  • Id1,Id2,类型 {json 数据}
  • Id1、Id2、Id3,输入 {json 数据}

我们在创建更高级别的接口以存储关系数据的一系列数据集方面投入了大量工作

对于任何给定的类型,您可以定义一种存储类型——(值、未加权列表、加权列表、带 guid 的加权列表)

我们为它们中的每一个都有更高级别的接口 - 查询、排序、时间戳比较、交集等。

这样,如果有人意识到他们需要扩展数据库的特定部分,他们可以保留大部分基础设施,并且只将他们需要的表移动到这个分片数据库中

你的想法是什么?如上所述,我很想知道你们的想法

【问题讨论】:

    标签: mysql ruby-on-rails scalability nosql


    【解决方案1】:

    可扩展性是一个难以破解的难题。我的背景包括两年的 BEA 系统销售工程师,当时他们只销售 TUXEDO 中间件(TUXEDO == Transactions for UNIX Extended for Distributed Operations)。 TUXEDO 仍然是 Unix 平台上的 TPC-C 基准测试之王。

    扩展 WRT 数据库与数据库本身无关,而与您访问该数据库的方式有关。例如,如果您建立到数据库的连接,并且希望单个连接扩展,则使该连接始终访问数据库中的同一个表。当今基础架构(包括 RoR)的问题在于,当它们打开通用连接时,这些连接会访问数据库中的许多表。

    因此,如果您想使数据库 CONNECTION 扩展,请使该连接将数据库引擎集中在尽可能少的数据库资源上。例如,如果您可以设法创建一个“聚焦”连接,它只访问一个表和一个表索引,那么它的扩展性将比访问数据库中的每个表和为所有这些表定义的每个索引的连接要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2018-03-31
      相关资源
      最近更新 更多