选择基于文档的 NoSQL 选项与 KV 存储相比有什么优势,反之亦然?
嗯,我最近大约一个月一直在研究NoSQL。我认为,它通常可以被描述为:
最大的区别在于,面向文档的数据库支持二级索引,而键值对数据库不支持。一般来说,面向文档的数据库倾向于允许更丰富的查询,可以执行范围查询、排序和其他类型的“高级”操作。
在键值数据库模型中,用户可以选择键是什么,而文档模型中的文档标识符通常是系统生成的。
键值数据库模型中的键值对不能分组,而在文档数据库中,我们可以将键值对分组成单独的文档;此外,某些形式的文档数据库甚至允许我们进一步将这些文档分组,即所谓的“集合”或“域”。
虽然文档数据库中的文档具有明确定义的内部结构(因此可以通过DBMS进行操作;例如,创建索引),但在键值数据库中,这些值的任何可能的内部结构都从DBMS的角度来看是不透明的。
在键值模型中,访问多个数据库条目(在这种情况下是键值对)需要单独的请求。另一方面,在文档模型中,可以在单个请求中检索多个数据库条目(在这种情况下是文档)。