【发布时间】:2017-07-07 17:01:57
【问题描述】:
序幕:
我正在试验“多租户”平面文件数据库系统。在应用程序启动时,在启动服务器之前,每个平面文件数据库(我称之为日志)都被转换为内存中的一个大型 javascript 对象。应用程序从那里开始它的服务。
应用程序运行时行为将服务于来自许多不同数据库的请求(每个域一个 db)。所有读取都来自内存中的对象。虽然任何 CRUD 都会修改内存中的对象并将其流式传输到日志中。
问题: 如果我在内存中有 N 个这样的数据库对象,它们已经从平面文件中加载(假设平均每个大约 1MB),那么拥有 N 个写入流我会处理什么样的限制?
【问题讨论】:
-
可写流有什么用途?您说您将数据读入内存,所以我不了解可写流的作用。这些流背后是否有文件句柄,或者它们只是您自己对内存中数据的自定义流抽象?
-
它和日志文件没有什么不同。我正在将内存中的数据库的更改流式传输到一个平面文件中......就像这个
fs.createWriteStream('log.txt', {'flags': 'a'})。我可能会打开 1000 个这样的流。我没有对已从日志序列化到内存中的数据库使用流。日志包含数据库的全部历史,内存中的对象只包含最新状态。我也应该提一下。 -
我问的原因是,如果您使用只进入内存的自定义流,那么除了表示流的 Javascript 对象的内存和您唯一的限制将是内存。如果流后面有文件句柄,那么您对打开文件句柄的系统限制会因操作系统和配置而异。
-
谢谢@jfriend00 我想这就是我一直在寻找的答案:“打开文件句柄的系统限制”。
标签: node.js database iostream flat-file