我正在为具有零拷贝数据查找功能的进程内数据库编写 native Node 模块。我希望我的模块也有这种能力。换句话说,当我从数据库中获取数据时,我希望将数据传递给 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

通过使用以上两个类,可以在原生 Node 模块中实现字符串和字节数组的零拷贝。不幸的是,似乎(在我写这篇文章的时候)它不可能用于对象。

编辑

如果您只对对象的 stringBuffer 属性(但不是整个对象本身)具有零复制能力,则可以使用 V8 API 中的拦截器或访问器轻松实现它。

关于c++ - 如何在 native Node 模块中维护零拷贝?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16477385/

10-16 19:48