NoSQL 数据库系统中的键值存储
Key Value Store in NoSQL Database Systems
实际上,每当我搜索一些 NoSQL 数据库系统中使用的键值存储时,我都会遇到这样的定义:"Each value has its own unique key and values are stored depending on their keys."
但是,我无法理解这个数据库系统的子结构。
我们可以说键值存储是c++中的哈希映射,值可以是原始类型或对象吗?
这取决于您所使用的键值存储类型。
如果你举个例子gdbm,它与C++中的hasmap非常相似,除了键和值必须是字节。如果你想存储更复杂的数据结构,你必须序列化它们。在这种数据库中,AFAIK 没有多少模式可以使用。
还有 Ordered 键值存储,其中字典键使用 lexicographic order 按键排序。在这种情况下有多种模式。它们都依赖于以某种方式构建键的键组合,以利用键值存储提供的前缀搜索和快速 next/prev 查找。它还依赖于为单个记录创建多个键值对。
有关更多信息,请参阅我对该主题的回答:
- 见How to store list in key-value store
- 见Expressing multiple columns in berkeley db in python?
- 见How to give multiple values to a single key using a dictionary?
也就是说,使用 wiredtiger 键值存储时,所有这些模式都变得更加明确,请参阅 Schema, Columns, Column Groups, Indices and Projections in wiredtiger documentation
实际上,每当我搜索一些 NoSQL 数据库系统中使用的键值存储时,我都会遇到这样的定义:"Each value has its own unique key and values are stored depending on their keys."
但是,我无法理解这个数据库系统的子结构。
我们可以说键值存储是c++中的哈希映射,值可以是原始类型或对象吗?
这取决于您所使用的键值存储类型。
如果你举个例子gdbm,它与C++中的hasmap非常相似,除了键和值必须是字节。如果你想存储更复杂的数据结构,你必须序列化它们。在这种数据库中,AFAIK 没有多少模式可以使用。
还有 Ordered 键值存储,其中字典键使用 lexicographic order 按键排序。在这种情况下有多种模式。它们都依赖于以某种方式构建键的键组合,以利用键值存储提供的前缀搜索和快速 next/prev 查找。它还依赖于为单个记录创建多个键值对。
有关更多信息,请参阅我对该主题的回答:
- 见How to store list in key-value store
- 见Expressing multiple columns in berkeley db in python?
- 见How to give multiple values to a single key using a dictionary?
也就是说,使用 wiredtiger 键值存储时,所有这些模式都变得更加明确,请参阅 Schema, Columns, Column Groups, Indices and Projections in wiredtiger documentation