Как я могу поддерживать нулевое копирование в модуле собственного узла?

Я пишу модуль нативного узла для внутрипроцессной базы данных, которая обеспечивает поиск данных с нулевым копированием. Я хотел бы, чтобы мой модуль также имел эту способность. Другими словами, когда я получаю данные из базы данных, я хотел бы передать данные в V8 без необходимости копировать память или анализировать что-то.

Как я могу это сделать?

До сих пор все способы, которые я видел, включали в себя либо разбор между JSON и обратно (в данном случае это большая трата ресурсов), либо создание структур данных V8 и копирование в них данных.

ПРИМЕЧАНИЕ: если вам интересно, поиск данных с нулевым копированием означает (в двух словах), что ядру базы данных не нужно копировать память при получении данных.

4

Решение

Я думаю, что нашел решение, хотя оно довольно ограничено.

Интересную документацию можно найти здесь: 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 свойства объекта (но не самого объекта), его можно легко реализовать с помощью перехватчиков или средств доступа в API V8.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]