不能用RDBMS模拟nosql键值对数据库吗
Can't we simulate nosql key value pair databases by RDBMS
我了解到使用 Amazon DynamoDB 的优势之一(除其他外)是我们可以只转换 Java 中的对象 XML/JSON 并将其作为值存储在 nosql 数据库中。但是我们不能只在字符串中序列化 java 对象,并通过 2 个字段 table -- key 和 varchar/blob 让 RDBMS 模拟键值 nosql 数据库。 varchar 可以存储序列化后的字符串。这个引用的好处是不是说错了?
此外,RDBMS 也可以分布式,因此可以扩展。所以我看到使用 nosql 的唯一好处是让每个事务都遵守 ACID,从而使操作更快。这是唯一的优势吗?
分布式 RDBMS 是一件复杂的事情。因为它可以支持不是 key/value 而是更复杂的相互关联表的数据,所以以最佳方式拆分数据变得非常困难。对于您可能希望针对该数据 运行 的所有类型的查询,无法以最佳方式执行此操作。
而如果是 key/value 数据,您可以 运行 查询的类型更简单,因此问题 space 也简单得多。更容易确保您以不会损害查询的方式拆分数据,因为无论如何您的查询主要是按键查找。只要您可以通过键确定性地将查询映射到键所在的节点,您的查询就会保持优化。
此外,扩展更容易。向集群添加新节点涉及重新映射哪些键位于哪些节点上,但这在 key/value 存储中可以更轻松地完成。没有要跟踪的外键。
Key/value 存储更容易扩展,因为它们不像 RDBMS 那样试图强制执行 ACID 属性或数据完整性。
您假设如果您只是像使用 RDBMS 一样使用 key/value 存储,那么您可以做那些事情,这是真的。但 RDBMS 软件的设计假设您 可能 需要 ACID 和数据完整性,因此默认情况下会强制执行这些事情。
RDBMS 是否可以设计为服务于任一工作负载,并具有配置参数以完全禁用 ACID 和数据完整性?当然。如果您找到使用这些配置选项实现的 RDBMS,请随意将其用作 key/value 存储。 (我一个都不知道。)
或者您可以只使用从一开始就围绕该概念设计的 key/value 商店。您不必强迫 key/value 商店模仿 key/value 商店。
这就是存在不同技术的原因——它们针对不同类型的工作进行了优化。这也是螺丝头有不同类型的原因。 None 比另一个“更好”,它们是为不同的工作而设计的。每个人都或多或少地替代了其他人擅长的工作。
我了解到使用 Amazon DynamoDB 的优势之一(除其他外)是我们可以只转换 Java 中的对象 XML/JSON 并将其作为值存储在 nosql 数据库中。但是我们不能只在字符串中序列化 java 对象,并通过 2 个字段 table -- key 和 varchar/blob 让 RDBMS 模拟键值 nosql 数据库。 varchar 可以存储序列化后的字符串。这个引用的好处是不是说错了?
此外,RDBMS 也可以分布式,因此可以扩展。所以我看到使用 nosql 的唯一好处是让每个事务都遵守 ACID,从而使操作更快。这是唯一的优势吗?
分布式 RDBMS 是一件复杂的事情。因为它可以支持不是 key/value 而是更复杂的相互关联表的数据,所以以最佳方式拆分数据变得非常困难。对于您可能希望针对该数据 运行 的所有类型的查询,无法以最佳方式执行此操作。
而如果是 key/value 数据,您可以 运行 查询的类型更简单,因此问题 space 也简单得多。更容易确保您以不会损害查询的方式拆分数据,因为无论如何您的查询主要是按键查找。只要您可以通过键确定性地将查询映射到键所在的节点,您的查询就会保持优化。
此外,扩展更容易。向集群添加新节点涉及重新映射哪些键位于哪些节点上,但这在 key/value 存储中可以更轻松地完成。没有要跟踪的外键。
Key/value 存储更容易扩展,因为它们不像 RDBMS 那样试图强制执行 ACID 属性或数据完整性。
您假设如果您只是像使用 RDBMS 一样使用 key/value 存储,那么您可以做那些事情,这是真的。但 RDBMS 软件的设计假设您 可能 需要 ACID 和数据完整性,因此默认情况下会强制执行这些事情。
RDBMS 是否可以设计为服务于任一工作负载,并具有配置参数以完全禁用 ACID 和数据完整性?当然。如果您找到使用这些配置选项实现的 RDBMS,请随意将其用作 key/value 存储。 (我一个都不知道。)
或者您可以只使用从一开始就围绕该概念设计的 key/value 商店。您不必强迫 key/value 商店模仿 key/value 商店。
这就是存在不同技术的原因——它们针对不同类型的工作进行了优化。这也是螺丝头有不同类型的原因。 None 比另一个“更好”,它们是为不同的工作而设计的。每个人都或多或少地替代了其他人擅长的工作。