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