【问题标题】:How to convert an existing relational database to a key-value store?如何将现有的关系数据库转换为键值存储?
【发布时间】:2017-12-30 20:45:56
【问题描述】:

我正在尝试将现有的关系数据库映射到键值存储。几个示例表如下所示。

例如,上面的“员工详细信息”表在 Redis(或任何类似的键值存储)中可以表示如下

set emp_details.first_name.01 "John"
set emp_details.last_name.01 "Newman"
set emp_details.address.01 "New York"

set emp_details.first_name.02 "Michael"
set emp_details.last_name.02 "Clarke"
set emp_details.address.02 "Melbourne"

set emp_details.first_name.03 "Steve"
set emp_details.last_name.03 "Smith"
set emp_details.address.03 "Los Angeles"

“付款”表也可以如上所示。但是这种方法并没有在“Employee Details”表和“Payments”表之间建立一对多的关系。因此,有没有更好的方法从现有的 RDBMS 中实现键值存储。您可以参考这两个表并建议更好的键模式来存储值。提前致谢。

【问题讨论】:

  • 请以文本形式包含文本,而不是图像/链接。我们可以剪切和粘贴或搜索这些内容。

标签: database redis rdbms key-value-store leveldb


【解决方案1】:

Nosql 数据库基本上是聚合存储。关系及其关联值存储在 key-val 设计的“值”部分中。

避免连接有助于提高性能。

关于 nosql 建模的优秀链接 - https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/

【讨论】:

    【解决方案2】:

    Relational tables represent business/application relationships/associations. FKs(外键)得到称为的关系,但不是。 (它们只是关于每个业务/应用程序情况和相应数据库状态的事实。)FK 约束声明只是告诉 RDBMS 强制子行作为超键(唯一键)出现在其他地方。 (虽然 DBMS 可以使用它来优化。)关系查询不需要约束。

    FK 是关系型的。在非关系 DBMS 中,如果您希望某些查询更简单或更快,例如,当它们是涉及某些 FK 的某些关系连接的等价物时,以使更新和其他查询复杂化为代价,然后你会做一些事情,比如冗余记录数据,或者以嵌套/分层的方式,或者使用指针/间接。

    关系与非关系模式和查询的这种差异是数据模型中difference 和关系模型优势的基础。使用关系表作为数据结构允许直接的应用程序中立查询,具有一定的实现计算复杂性和优化机会。任何对特定NoSQL DBMS 的介绍都将解释如何建模和查询。 (通常假设初始关系设计。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多