Database 数据库和简单的键值对之间有什么区别?

Database 数据库和简单的键值对之间有什么区别?,database,nosql,rdbms,Database,Nosql,Rdbms,在一个非常基本的场景中(可能是一个web应用程序),使用像MySQL这样的大型数据库是过分的。最让我困扰的是,在node.js中,我可以用比使用驱动程序更少的代码编写解决方案 var content = []; setInterval(60000, function(){ fs.writeFileSync("database.db", JSON.stringify(content)); }); 现在,这个解决方案似乎足够优雅,如果不是有一点滞后的话(仅仅因为JSON是巨大的)。但我真正想

在一个非常基本的场景中(可能是一个web应用程序),使用像MySQL这样的大型数据库是过分的。最让我困扰的是,在node.js中,我可以用比使用驱动程序更少的代码编写解决方案

var content = [];
setInterval(60000, function(){ 
  fs.writeFileSync("database.db", JSON.stringify(content));
});
现在,这个解决方案似乎足够优雅,如果不是有一点滞后的话(仅仅因为JSON是巨大的)。但我真正想了解的是,像MySQL这样的大型系统如何比简单地使用数组更好。(我假设我们不是在看1GB的数据集,只是一些简单的键值对,一些小到可以直接在应用程序内存中管理的数据集


更重要的是,与NoSQL相比,数据库具有哪些功能?向上面所示的伪代码这样的应用程序添加此类功能有多困难?

使用上述代码的风险在于,如果两个人同时更新数据库,则整个数据库可能会被破坏(“concurrancy”)。即使是代码中最轻微的错误(例如,意外地将
内容设置为
[]
)也会使您失去数据

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

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


NoSQL,特别是简单的键值对,更简单,它往往有巨大的优势——速度、负载平衡和冗余变得更简单等等,所以这是一种折衷。

数据库不是魔法。你可以在你自己的软件中实现它们所做的一切。但你为什么要这样做呢

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

  • 数据在更改时自动持久保存到硬盘驱动器
  • 多进程并发访问的自动处理
  • 频繁数据请求的自动缓存
  • 数据的自动合理性检查(通过约束)
  • 搜索索引以更快地查找数据
  • 查询语言允许您对数据进行过滤和转换
  • 特设数据分析框架

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

我仍然难以理解关系数据库的好处--您不能将整个家谱存储为记录吗?您希望尽可能存储每个“项”信息单独更新,所以更新只更新少量记录。另外,如果两个用户想同时更新两个不同的人,这不是问题——他们是不同的记录。如果整个家谱是一个记录,他们不能同时更新。我明白了,但如果我在代码中添加一些安全的gaurd,会不会有问题ure?对于一个非常小规模的web应用程序,你可以侥幸逃脱。我自己也做过。不过别忘了备份!并且随着数据量的增加,你的应用程序会变慢。几百条记录可以工作,更多的记录会变慢。@Bobbee确定你可以添加一些安全防护措施。你也可以实现自己的缓存layer,您自己的增量更改系统,您自己的搜索索引库等等。但最终您将花费数周的时间创建现有数据库解决方案的(坏的)克隆。“与NoSQL相比,数据库有什么功能?”-大多数NoSQL解决方案都是数据库!