0

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

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

现在,这个解决方案似乎足够优雅,即使不是一点点延迟(因为 JSON 非常庞大)。但我真正想了解的是,像 MySQL 这样的大型系统如何比简单地使用数组更好。(我假设我们不是在看 1 GB 的数据集,只是简单的键值对,小到可以直接在应用程序内存中管理的东西。

更重要的是,与 NoSQL 之类的功能相比,数据库具有哪些功能?将这种类型的功能添加到像上图所示的伪代码这样的应用程序中会有多困难?

4

2 回答 2

2

Databases aren't magic. You could implement everything they do in your own software. But why would you?

Databases can give you a lot of features for free, which would take a lot of effort to implement and test yourself:

  • Automatic persistence of data to hard drive the moment it is changed
  • Automatic handling of concurrent access by multiple processes
  • Automatic caching of frequent data requests
  • Automatic plausibility checking of your data (through constraints)
  • Search indices for faster lookup of data
  • Query languages allow you to do filtering and transformation of data
  • Frameworks for ad-hoc data analysis

But when you have no need for any of that, storing all your data in your own flatfile format is always an option.

于 2013-06-28T08:43:09.193 回答
0

使用上述代码运行的风险是,如果两个人同时更新数据库,您的整个数据库很可能会被破坏(“并发”)。即使是代码中最轻微的错误(例如意外设置content[])也会让您没有数据。

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

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

NoSQL,尤其是简单的键值对,要简单很多,这往往具有巨大的优势——速度、负载均衡和冗余变得更简单等,所以这是一个权衡。

于 2013-06-27T20:41:28.587 回答