【问题标题】:What pattern should I use for refactoring my relational SQL database to a key-value store?我应该使用什么模式将我的关系 SQL 数据库重构为键值存储?
【发布时间】:2015-11-14 01:18:31
【问题描述】:

我正在考虑将我的 Web 应用程序从 SQL 数据库迁移到键值存储,这样我就可以水平扩展我的应用程序。

我正在计划如何迁移我的架构 - 我确信必须有一个这样做的模式。

我将举一个米老鼠的逻辑例子来展示我的想法。这是一个关系数据库中的简单库系统,包含Books、Persons 和BorrowEvents。您可以使用BorrowEventBooks 加入Persons,以查看谁借了Book

Book
 - BookID
 - BookTitle

Person
 - PersonID
 - PersonName

BorrowEvent
 - BorrowEventID
 - BookID
 - PersonID

现在让我们尝试以下重构:

[Key][Value]
 - ID/BookName
 - ID/PersonName
 - ID/[String]"BorrowEvent-"+[ID of BookName]+"-"+[ID of PersonName] 

这通过查询 BorrowEvent 来工作,使用正则表达式拆分值的字符串以获取 ID。

现在这有几个限制。如果我想在我的Book 中添加一个Author,我必须添加一个额外的跃点来检索我的图书信息。如果我希望Person 有名字和姓氏,也是如此。

我想这种从关系存储到键值存储的转换必须有一个模式。 (或多种模式)。我只是不知道叫什么名字。

我的问题是:我应该使用什么模式将我的关系 SQL 数据库重构为键值存储?

假设

  • 假设这是一个逻辑重构,而不是物理重构。

【问题讨论】:

  • 关系型数据库一般可以处理n-ary关系;当您在自己的代码中重新发明关系 DBMS 功能时,分解成二元关系可能意味着完整性和/或性能损失。我想起了爱因斯坦的名言“让事情尽可能简单,但不要更简单”。
  • 或者引用:“对于每个复杂的问题,都有一个清晰、简单和错误的答案。”

标签: design-patterns refactoring relational-database key-value horizontal-scaling


【解决方案1】:

This post lists 多种技术,包括:

  1. 降维
  2. 索引表
  3. 复合键索引
  4. 使用复合键进行聚合
  5. 反向搜索 - 直接聚合
  6. 树聚合
  7. 邻接列表
  8. 物化路径
  9. 嵌套集
  10. 嵌套文档扁平化

    我。带编号的字段名称

    二。邻近查询

  11. 批处理图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多