首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将2-3GB的树存储在内存中,并使nodejs能够访问它?

如何将2-3GB的树存储在内存中,并使nodejs能够访问它?
EN

Stack Overflow用户
提问于 2015-11-07 17:16:46
回答 2查看 325关注 0票数 4

我有一棵巨大的数据树,我希望能够有效地访问树叶,并高效地将大块(每次10- 20 MBs )序列化为json。

现在,我将其存储为javascript对象,但我看到垃圾收集时间为4-5秒,这是不好的。

我尝试使用嵌入式数据库( sqlite和lmdb),但是当我访问数据时,从行到树的性能开销很高--我需要6秒才能将5 MBs序列化为json。

理想情况下,我希望能够告诉v8“请不要试图垃圾收集那棵树!”(我试着在整个过程中关闭GC,但我在前面运行了一个轻量级tcp服务器,它很快就开始耗尽内存)。

或者,也许有嵌入(或者没有嵌入?)以我不知道的方式处理这个问题的数据库。(我确实知道MongoDB -它对最大对象大小有16 MB的限制)。

我正在考虑也许尝试将树打包到一个节点缓冲区对象中(基本上是自己模拟v8堆栈),但在我绝望之前,我想我会问stackoverflow :-)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-08 19:12:20

在GC语言中存储大型对象是一种糟糕的做法。这也是Java世界中的一个问题。有两种解决办法:

  • 使用内存中类似DB的Redis。看看您是否可以利用Redis提供的数据结构原语来发挥您的优势。
  • comparatively NodeJS提供了简单(相对)的FFI,因为一半的库都是在它中编写的。请参阅关于如何继续进行的加载项文档这里

如果您正在服务器上部署,那么您还有第三个选项。与直接将本机代码链接到Node不同,您可以将其编写为一个服务,并使用像Bean秸秆/ ZeroMQ / RabbitMQ这样的消息代理将其绑定在一起。

这样可以方便部署,因为可以为应用程序提供合适的服务器资源。在您的示例中,前端TCP服务器可以位于它自己的廉价实例上,而Tree争用程序可以使用一个大型内存实例。

而且,对于关系数据来说,MongoDB是可怕的,这使它成为存储树的糟糕选择。图形数据库可能会根据您的使用情况而工作。

票数 1
EN

Stack Overflow用户

发布于 2015-11-07 17:52:59

也许您可以查看一下图形数据库Neo4j现在似乎很受欢迎,而且它们有node.js客户端库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33585498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档