Я пытаюсь связать monetdb
с node.js
. У меня есть простая программа c (20 строк), которая может запрашивать moentdb
с использованием библиотек mapi.
Могу ли я использовать эти библиотеки для создания чего-то (модуля / дополнения) для node.js
, которое использует эти библиотеки и подключается к monetdb
?
(Использование odbc - вариант, но у него есть свои недостатки.)
Обновление1:
node-ffi довольно крутой. Мне довольно легко удалось создать программу выборки таблиц. (Например, я добавил свой рабочий код.)
Итак, если у меня есть 3 варианта
1. ODBC
2. узел-ffi
3. программа c для получения данных из базы данных и прослушивания соединения от node.js через сокет
Что касается производительности, что лучше реализовать, если у меня будет немного меньше времени на разработку аддона для node.js
var ffi = require("ffi");
var libmylibrary = ffi.Library('/usr/local/lib/libmapi.so', {
"mapi_connect":["int",["string",'int',"string","string","string","string"]],
"mapi_query":['int',["int","string"]],
"mapi_fetch_row":["int",["int"]],
"mapi_fetch_field":["string",["int","int"]]
});
var res = libmylibrary.mapi_connect("localhost", 50000,"monetdb", "monetdb", "sql", "demo");
console.log(res);
var ret=libmylibrary.mapi_query(res,"select * from table");
while(libmylibrary.mapi_fetch_row(ret)){
console.log(libmylibrary.mapi_fetch_field(ret,0));
console.log(libmylibrary.mapi_fetch_field(ret,1));
}
Обновление 2:
Приведенный выше код не рекомендуется для производственного использования ... он не использует асинхронные функции node.js, поэтому используйте его для детских шагов
1 ответ
Хотя FFI позволяет легко вызывать собственный код, вам действительно не следует использовать его для чего-то, что вам часто приходится делать, например, для вызова библиотеки базы данных. Из документов:
С вызовами FFI связаны нетривиальные накладные расходы. Сравнение жестко запрограммированной версии привязки strtoul () с версией strtoul () для FFI показывает, что собственная жестко запрограммированная привязка выполняется на несколько порядков быстрее. Так что не используйте версию функции на языке C только потому, что она быстрее. Звонки FFI обходятся дорого, так что сделайте так, чтобы они того стоили.
Другими словами, FFI работает, но медленно . Это нормально, если вам просто нужно сделать несколько звонков, но очень плохие новости, если вам нужно делать частые звонки.
Вам нужно написать надстройку. Аддоны - это модули C ++, которые обеспечивают связь с библиотеками C и C ++. (То, что вы должны написать аддон на C ++, не означает, что вы не можете вызывать чистый код C из аддона!)
Узел docs предоставляет множество примеров, которые должны помочь вам начать работу. Если вы работаете с Windows, вот несколько советов по настройке VS.
Если вызовы библиотеки C блокируются, вам нужно сделать их асинхронными. libuv предоставляет пул потоков, над которым вы можете работать.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
npm install monetdb
для установки драйвера.