我如何在本地节点模块中保持零拷贝?

我正在为一个具有零拷贝数据查找function的进程内数据库编写本地节点模块。 我想我的模块也有这个能力。 换句话说,当我从数据库中获取数据时,我想将数据传递给V8,而不需要复制内存或parsing某些内容。

我怎样才能做到这一点?

到目前为止,我所看到的所有方法都是在JSON之间来回切换(在这种情况下浪费很多资源),或者实例化V8数据结构并将数据复制到这些数据结构中。

注意:如果您想知道,零拷贝数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。

       

网上收集的解决方案 "我如何在本地节点模块中保持零拷贝?"

我想我find了解决办法,虽然它是相当有限的。

有趣的文档可以在这里find: 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和字节数组实现零复制。 不幸的是,似乎(当时我正在写这个)对象是不可能的。

编辑

如果对于对象的stringBuffer属性(而不是整个对象本身)具有零拷贝能力,可以使用V8 API中的拦截器或访问器轻松实现。