数据库和键值对之间有什么区别?

时间:2013-06-27 20:29:41

标签: database nosql rdbms

在一个非常基本的场景(也许是一个网络应用程序)中,使用像MySQL这样的大型数据库是过度杀戮。令我困扰的是,在node.js中,我可以用比使用驱动程序所需的更少的代码编写解决方案。

var content = [];
setInterval(60000, function(){ 
  fs.writeFileSync("database.db", JSON.stringify(content));
});

现在,这个解决方案似乎足够优雅,如果不是一点点滞后(由于JSON很大的事实)。但我真正想要理解的是,像MySQL这样的大型系统如何比简单地使用数组更好。 (我假设我们不是在看1千兆字节的数据集,只是简单地使用键值对,这些东西足够小,可以直接在应用程序内存中管理。

更重要的是,数据库具有什么功能而不像NoSQL?将这种类型的功能添加到应用程序(如上图所示的伪代码)有多难?

2 个答案:

答案 0 :(得分:2)

数据库并不神奇。您可以在自己的软件中实现他们所做的一切。但你为什么要这样做?

数据库可以免费为您提供许多功能,这需要花费很多精力来实现和测试自己:

  • 将数据更改为硬盘时自动持久存储
  • 自动处理多个进程的并发访问
  • 频繁数据请求的自动缓存
  • 自动合理检查数据(通过约束)
  • 搜索索引以便更快地查找数据
  • 查询语言允许您对数据进行过滤和转换
  • 用于临时数据分析的框架

但是当你不需要任何这些时,以你自己的平面文件格式存储所有数据总是一种选择。

答案 1 :(得分:0)

使用上述代码运行的风险是,如果两个人同时更新数据库,则整个数据库可能会被销毁(“concurrancy”)。即使是代码中最轻微的错误(例如,不小心将content设置为[])也会让您没有数据。

NoSQL类型的数据库将保护您免受这种情况的影响 - 更新错误的记录可能会破坏记录,但至少您拥有其余的记录。

关系数据库还会添加记录间约束。 NoSQL通过拥有非常复杂的记录减少了对此的需求,但是如果你有一个家谱,并且每个人都是一个记录,我认为没有任何方法可以在两个强制执行的人之间进行引用(如果人“A”是人“B”的孩子,那么人“B”必须是人“A”的父母,并且你可以在任何一个方向查找记录。)

NoSQL,特别是简单的键值对,更简单,往往具有巨大的优势 - 速度,负载平衡和冗余变得更简单等等,所以这是一个权衡。