【发布时间】:2018-01-22 07:45:30
【问题描述】:
在SQL数据库中,我们一般将相关信息存储在数据库的不同表中。从我从 RocksDB 文档中读到的内容来看,确实没有明确或“正确”的方式来表示这种结构。所以我想知道对信息进行分类的做法是什么?
假设我有三种类型的信息,客户、产品和员工。我想在 RocksDB 中实现这些。我应该使用键的前缀、不同的列族还是不同的数据库?
感谢您的任何建议。
【问题讨论】:
在SQL数据库中,我们一般将相关信息存储在数据库的不同表中。从我从 RocksDB 文档中读到的内容来看,确实没有明确或“正确”的方式来表示这种结构。所以我想知道对信息进行分类的做法是什么?
假设我有三种类型的信息,客户、产品和员工。我想在 RocksDB 中实现这些。我应该使用键的前缀、不同的列族还是不同的数据库?
感谢您的任何建议。
【问题讨论】:
你可以通过一些前缀来做到这一点,这意味着这样的表,这样的列,这样的 id。为简单起见,您可以将其存储在一个列族中并明确存储在一个数据库中,因为您有原子操作、快照等。更好的问题是,除非您正在构建更高级别的东西,否则为什么要将关系数据存储在 nosql db 中。 顺便说一句,checkout linqdb 这是一个更高级别的 db 示例,您可以在其中存储实体、执行 linq 样式的操作,它在下面使用 Rocksdb。
【讨论】:
数据在键值存储中的组织方式取决于实现。没有“一条好路”,它取决于底层的键值存储功能(是否特别是键排序)。
同样的规范化/反规范化技术适用。
我认为您缺少关于键值存储应用程序设计的部分是key composition 的概念。很快,就是以一种易于查询的方式构建键的做法。如果数据库是有序的,那么它也将用于前缀/范围/扫描查询和下一个/上一个导航。这将引导您以快速查询的方式构建键前缀,即。不需要全表扫描。
在 Stack Overflow 上将您的研究扩展到其他键值存储,例如 bsddb 或 leveldb。
【讨论】: