当前位置: 首页 > 面试题库 >

基于文档的数据库与基于键/值的数据库之间的区别?

满玉泽
2023-03-14
问题内容

我知道有三种不同的,流行的非SQL数据库类型。

  • 键/值:Redis,Tokyo Cabinet,Memcached
  • ColumnFamily:Cassandra,HBase
  • 文件:MongoDB,CouchDB

我已经读了很长的博客,但对它的了解却很少。

我知道关系数据库,并且在MongoDB / CouchDB等基于文档的数据库中徘徊。

谁能告诉我这些和清单上的两个前者之间的主要区别是什么?


问题答案:

主要区别在于数据模型和查询功能。

键值存储

第一种非常简单,可能不需要进一步说明。

数据模型:超过键值存储

尽管对于诸如Cassandra之类的数据库的正确名称存在一些争论,但我想将其称为 列族存储
。尽管键值对是Cassandra的重要组成部分,但不仅限于此。它允许您嵌套键值对,因此一个键可以引用多个子键值对。

但是,您不能无限期地嵌套键/值对。您仅限于三个级别(列族)或四个级别的嵌套(超级列族)。如果术语“列族”不响,请参阅WTF的SuperColumn文章,它很好地解释了Cassandra的数据模型。

文档数据
(例如CouchDB和MongoDB)以JSON对象的形式存储整个文档。您可以将这些对象视为嵌套的键/值对。与Cassandra不同,您可以根据需要嵌套键-
值对。JSON还支持数组,并且可以理解不同的数据类型,例如字符串,数字和布尔值。

查询方式

我相信只能通过键或编写map-
reduce函数来查询列族存储。您无法像在SQL数据库中那样查询值。如果您的应用程序需要更复杂的查询,则您的应用程序将必须创建和维护索引才能访问所需的数据。

文档数据库还支持按键和map-
reduce函数进行查询,但是还允许您按值进行基本查询,例如“给我所有拥有10条以上帖子的用户”。文档数据库以这种方式更加灵活。



 类似资料:
  • 问题内容: 是否有任何库在Java中创建使用文件作为数据库的程序,而不必在要使用它的计算机上安装数据库服务? 问题答案: Derby和Hypersonic SQL均可在内存和服务器模式下运行。

  • 基于FMDB的数据库增删改查Demo。其中包括 statusBar 上显示Log的用法。仅支持ARC。比较适合新手。 [Code4App.com]

  • 我如何才能显示一个包含姓名、性别和出生日期的数据表,而只显示今天出生的人? 使用来自jdbc的java连接。 也就是说,我有一张分别于2015年6月15日、2015年5月13日和2015年6月17日出生的3个孩子的表格。 逻辑执行后,只有一个DOB在2015年6月17日(今天的日期)的孩子会出现在桌面上。

  • 本文向大家介绍基于Docker的PHP调用基于Docker的Mysql数据库,包括了基于Docker的PHP调用基于Docker的Mysql数据库的使用技巧和注意事项,需要的朋友参考一下 docker简介: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不

  • 问题内容: 我对本地数据库和基于服务的数据库有一些疑问:使用基于服务的数据库是否要求用户安装SQL Server?如果是这样,有没有解决的办法?本地数据库是否要求用户安装SQL Server?本地数据库和基于服务的数据库之间有什么区别?(我正在谈论Visual Studio中的项目) 问题答案: 客户端不需要安装SQL即可以编程方式连接到其他地方的数据库。无论哪种机制包含连接数据库的代码,通常都会

  • 6.9.1 基于Cursor的ItemReaders 使用游标(cursor)是大多数批处理开发人员默认采用的方法, 因为它是处理有关系的数据“流”在数据库级别的解决方案。Java 的 ResultSet 类其本质就是用面向对象的游标处理机制。 ResultSet 维护着一个指向当前数据行的 cursor。调用 ResultSet 的 next 方法则将游标移到下一行。 Spring Batch