2

我正在使用 Node.js 构建一个基于 Web 的聊天应用程序。当应用程序已经在 Node.js PaaS 中运行并由我的一群朋友测试时,我有点逐渐构建它。问题是,我不能在数据库服务上花太多钱来存储聊天记录。

所以我正在设计一个复杂的基于文件的数据库系统,就像 SQLite 一样。虽然我知道 SQLite 做类似的工作,但我想以 JSON 格式存储数据。原因很多。一个值得注意的原因是,为了减少 CPU 使用率,我只会将原始 JSON 数据发送到客户端,然后使用 AngularJS 正确呈现它们。

我的问题是:

  1. 你对这种方法有什么看法?
  2. 这种方法是否可以纵向和横向扩展?
  3. 有哪些可能的安全问题?
  4. 有没有可用的替代方法?

请注意,此解决方案仅适用于聊天记录等琐碎数据存储。我不会将这种方法用于大型和严肃的 Web 应用程序。

更新: 我不想使用 MongoDB 或其他,因为我负担不起这个项目的费用。我想将数据存储在平面文件中并将其放在磁盘中。因为,许多 PaaS 提供商以 1 美元的价格提供 1GB 的磁盘空间,而 1GB 的 MongoDB 存储非常高……他们甚至向我们收取传输的数据量、PUT 和 GET 的数量等费用。

4

2 回答 2

1

您对这种方法有什么看法?

该方法是一种很好的方法,但是由于在类似 SQLite 的数据库中缺乏结构,如果您处理大量数据,您将遇到问题。但是,JSON 与 NodeJS 可以很好地协同工作,因此您有充分的理由想要使用这两者。

这种方法是垂直和水平缩放吗?

在一个简单的实现中,它是垂直缩放而不是水平缩放。向服务器添加更多驱动器很容易,但实现可扩展的、分布式的、容错的软件要困难得多,而且不胜枚举……有很多原因导致软件的水平扩展更加困难,而且体积庞大MongoDB和类似系统附带的旨在解决水平扩展问题。如果你想要更少的体积,你不会得到水平缩放(通常),如果你想要水平缩放,你会得到更多的体积。

有哪些可能的安全问题?

您需要注意 JSON 注入。以下是有关 JSON 注入的一些资源: http ://www.slideshare.net/null0x00/json-injection https://www.owasp.org/index.php/OWASP_AJAX_Security_Guidelines#Protect_against_JSON.2FJavaScript_Hijacking

有没有其他可用的方法?

正如其他问题所暗示的那样,使用 MongoDB、MySQL 和 RethinkDB 等预先创建的数据库软件将是您的替代方法。但请记住,您可以免费托管这些内容。

笔记+来源

可能想看看https://github.com/boboman13/flatfile

来源于我自己的经验。

于 2014-06-12T18:13:30.243 回答
0

我知道MongoDB(可能还有其他人)正在使用二进制 JSON 格式。我会对此进行调查,以确保您不会重新发明轮子。至少我会说,由于 MongoDB 有一个 Node.js 库,它可能是在具有您需要的效率和易于实现之间的一个很好的权衡(因为您不需要编写数据库软件,因此可以让您更多地关注应用程序本身)。

于 2013-07-14T21:46:07.920 回答