在一个非常基本的场景(也许是一个网络应用程序)中,使用像MySQL这样的大型数据库是过度杀戮。令我困扰的是,在node.js中,我可以用比使用驱动程序所需的更少的代码编写解决方案。
var content = [];
setInterval(60000, function(){
fs.writeFileSync("database.db", JSON.stringify(content));
});
现在,这个解决方案似乎足够优雅,如果不是一点点滞后(由于JSON很大的事实)。但我真正想要理解的是,像MySQL这样的大型系统如何比简单地使用数组更好。 (我假设我们不是在看1千兆字节的数据集,只是简单地使用键值对,这些东西足够小,可以直接在应用程序内存中管理。
更重要的是,数据库具有什么功能而不像NoSQL?将这种类型的功能添加到应用程序(如上图所示的伪代码)有多难?
答案 0 :(得分:2)
数据库并不神奇。您可以在自己的软件中实现他们所做的一切。但你为什么要这样做?
数据库可以免费为您提供许多功能,这需要花费很多精力来实现和测试自己:
但是当你不需要任何这些时,以你自己的平面文件格式存储所有数据总是一种选择。
答案 1 :(得分:0)
使用上述代码运行的风险是,如果两个人同时更新数据库,则整个数据库可能会被销毁(“concurrancy”)。即使是代码中最轻微的错误(例如,不小心将content
设置为[]
)也会让您没有数据。
NoSQL类型的数据库将保护您免受这种情况的影响 - 更新错误的记录可能会破坏记录,但至少您拥有其余的记录。
关系数据库还会添加记录间约束。 NoSQL通过拥有非常复杂的记录减少了对此的需求,但是如果你有一个家谱,并且每个人都是一个记录,我认为没有任何方法可以在两个强制执行的人之间进行引用(如果人“A”是人“B”的孩子,那么人“B”必须是人“A”的父母,并且你可以在任何一个方向查找记录。)
NoSQL,特别是简单的键值对,更简单,往往具有巨大的优势 - 速度,负载平衡和冗余变得更简单等等,所以这是一个权衡。