我正在为进程内数据库编写一个本机节点模块,该数据库具有零拷贝数据查找功能。我希望我的模块也有这个能力。换句话说,当我从数据库获得数据时,我想将数据传递给V8,而不需要复制内存或解析什么。
我该怎么做?
到目前为止,我看到的所有方法都涉及到在JSON之间来回解析(在本例中几乎是浪费资源),或者实例化V8数据结构并将数据复制到它们中。
注意:如果您想知道,零拷贝数据查找意味着(简单地说)数据库引擎在检索数据时不需要复制内存。
发布于 2013-07-12 17:39:15
我认为我找到了解决办法,尽管它是相当有限的。
有趣的文档可以在这里找到:https://developers.google.com/v8/ (概述)和http://izs.me/v8-docs/main.html (API文档)
似乎V8有一个可用于此目的的ExternalStringResource类:
1ExternalStringResource.html
节点本身也有一个Buffer类,它也可以用于类似的目的:
http://nodejs.org/api/buffer.html
通过使用上述两个类,可以在本机节点模块中实现字符串和字节数组的零拷贝。不幸的是,似乎(在我编写这篇文章时)对象是不可能的。
编辑
如果您只对对象的string或Buffer属性(但不是整个对象本身)拥有零复制能力,则可以使用V8 API中的拦截器或访问器轻松地实现它。
https://stackoverflow.com/questions/16477385
复制相似问题