目录:
视频: NoSQL数据库之Redis数据库管理一Redis的介绍与安装部署 2024
一旦您正确地管理密钥,就可以设计如何使用NoSQL存储数据,并确保其安全且始终可以访问你需要做的。
键值存储中的数据类型
键值存储通常用作“水桶”的二进制数据。一些数据库确实提供了强大的内部数据输入和模式支持。其他人只是简单地在其客户端驱动程序中提供便利的帮助函数,以将公共应用程序数据结构序列化到键值存储。示例包括地图,列表和排序集。
<! Oracle NoSQL可以在两种模式下运行:简单二进制存储
-
高度结构化的Avro模式支持
-
Avro模式类似于关系数据库模式 - 执行一个非常严格的集合存储在数据库中的JavaScript对象表示法(JSON)数据的格式规则,如下所示:
{用户名: afowler”的,sessionid:13452673,因为:1408318745,主题:“ldquo; bluesky”}
您可以使用JSON文档定义Avro模式。这是以前显示的存储数据的Avro模式的示例:
当模式很重要时,Avro模式在数据库中提供了非常强的输入。在前面的例子中,你会看到字符串数据,一个数字会话ID,一个日期(自Unix时代以来的毫秒数,作为一个长整数),以及在网站上使用的主题的个性化设置。
文档分区提供二级索引
- 基本上,JSON文档中的已知属性使用类型进行索引。这允许范围查询(小于或大于),除了简单的相等和不相等的比较。 Riak设法提供范围查询没有一个严密的模式 - 只是简单的索引定义。如果数据在那里,它将被添加到索引。 复制数据 在其他服务器或服务器上存储相同数据的多个副本有助于确保在一台服务器发生故障时数据的可用性。服务器故障主要发生在同一个群集中。
您可以通过两种主要方式来操作副本:
主从:
所有读取和写入都发生在主设备上。只有主设备出现故障时,从设备才会接收和接收请求。主 - 从复制通常用于兼容ACID的键值存储。为了实现最大一致性,主存储被写入并且在事务完成之前更新所有副本。这种机制称为
- 两阶段提交 ,并在副本上创建额外的网络和处理时间。 Master-master:
可以在管理密钥的所有节点上进行读写。没有一个“概念”初级”的分区所有者。主 - 主副本通常最终是一致的,集群执行自动操作来确定键的最新值并删除旧的过时值。 在大多数键值存储中,这种情况发生缓慢 - 在读取时间。 Riak在这里是个例外,因为它在正常运行期间有一个反熵服务来检查一致性。 版本控制数据
- 为了启用自动冲突解决,您需要一种机制来指示最新版本的数据。最终一致的键值存储以不同的方式实现冲突解决。 Riak使用矢量时钟机制来预测哪个副本是最近的副本。其他键值存储使用简单的时间戳来指示过时。当冲突不能自动解决时,两个数据副本都会发送给客户端。在以下情况下发送到客户端的冲突数据可能发生: 客户端1向副本A写入“Adam:{likes:Cheese}”。
副本A将数据复制到副本B.
客户端1将副本A上的数据更新为“亚当:{喜欢:奶酪,讨厌:阳光}”。
此时,副本A没有足够的时间将最新数据复制到副本B.
客户端2将副本B上的数据更新为“亚当:{喜欢:狗,恨:袋鼠}”。
此时,副本A和副本B发生冲突,数据库群集不能自动解决差异。
-
另一种机制是使用时间戳并信任它们来指示最新的数据。在这种情况下,应用程序在更新值之前检查时间戳是否读取最新值是常识。
-
正在检查
-
检查并设置
机制
-
,
基本上表示
'如果最新版本仍然是版本2,则保存我的版本3'
。此机制有时称为 读取匹配更新(RMU) 或 读取匹配写入(RMW) 。 这个机制是Oracle NoSQL,Redis,Riak和Voldemort使用的默认机制。