我正在为具有零拷贝数据查找功能的进程内数据库编写本机节点模块。我希望我的模块也有这种能力。换句话说,当我从数据库中获取数据时,我想将数据传递给 V8,而不需要复制内存或解析某些东西。
我怎样才能做到这一点?
到目前为止,我看到的所有方法都涉及在 JSON 之间来回解析(在这种情况下几乎是浪费资源)或实例化 V8 数据结构并将数据复制到其中。
注意:如果您想知道,零复制数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。
我正在为具有零拷贝数据查找功能的进程内数据库编写本机节点模块。我希望我的模块也有这种能力。换句话说,当我从数据库中获取数据时,我想将数据传递给 V8,而不需要复制内存或解析某些东西。
我怎样才能做到这一点?
到目前为止,我看到的所有方法都涉及在 JSON 之间来回解析(在这种情况下几乎是浪费资源)或实例化 V8 数据结构并将数据复制到其中。
注意:如果您想知道,零复制数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。
我想我找到了解决方案,尽管它相当有限。
可以在此处找到有趣的文档: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
Node 本身也有一个Buffer
类也可以用于类似的目的:
http ://nodejs.org/api/buffer.html
通过使用上述两个类,可以在原生节点模块中实现字符串和字节数组的零拷贝。不幸的是,似乎(在我写这篇文章的时候)对象是不可能的。
编辑
string
如果您只对对象的orBuffer
属性(而不是整个对象本身)具有零复制能力感到满意,则可以使用 V8 API 中的拦截器或访问器轻松实现它。