Я пытаюсь связать 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, поэтому используйте его для детских шагов

5
Gaurav 22 Мар 2013 в 20:08
Попробуйте взглянуть на stackoverflow.com/questions/15393039/…. Однажды я наткнулся на него и нашел его интересным и, возможно, полезным для вас.
 – 
Nick Mitchinson
22 Мар 2013 в 23:21
1
В аддоне c ++ я посмотрел на github, полный код написан с заголовками v8 / node ... Я не уверен, можно ли добавить в аддон библиотеку, написанную исключительно на c ... Я вижу, что большинство пользователей критикуют node. js из-за отсутствия библиотек БД, если это можно сделать, то все БД можно подключить через node.js
 – 
Gaurav
22 Мар 2013 в 23:36
2
Для MonetDB появился новый собственный модуль драйвера Node.js: npmjs.com/package/monetdb Он доступен на npmjs.org, поэтому теперь вы можете запустить npm install monetdb для установки драйвера.
 – 
dnedev
18 Фев 2015 в 19:18

1 ответ

Лучший ответ

Хотя FFI позволяет легко вызывать собственный код, вам действительно не следует использовать его для чего-то, что вам часто приходится делать, например, для вызова библиотеки базы данных. Из документов:

С вызовами FFI связаны нетривиальные накладные расходы. Сравнение жестко запрограммированной версии привязки strtoul () с версией strtoul () для FFI показывает, что собственная жестко запрограммированная привязка выполняется на несколько порядков быстрее. Так что не используйте версию функции на языке C только потому, что она быстрее. Звонки FFI обходятся дорого, так что сделайте так, чтобы они того стоили.

Другими словами, FFI работает, но медленно . Это нормально, если вам просто нужно сделать несколько звонков, но очень плохие новости, если вам нужно делать частые звонки.

Вам нужно написать надстройку. Аддоны - это модули C ++, которые обеспечивают связь с библиотеками C и C ++. (То, что вы должны написать аддон на C ++, не означает, что вы не можете вызывать чистый код C из аддона!)

Узел docs предоставляет множество примеров, которые должны помочь вам начать работу. Если вы работаете с Windows, вот несколько советов по настройке VS.

Если вызовы библиотеки C блокируются, вам нужно сделать их асинхронными. libuv предоставляет пул потоков, над которым вы можете работать.

4
Community 23 Май 2017 в 15:02
1
Спасибо ... люди предложили odbc с node-odbc и ffi. Но не рекомендуется использовать эти методы специально для частых звонков. Я видел документы, но стиль кодирования был немного другим, поэтому старался избегать этого. Кажется, я не могу избежать написания аддона на С ++.
 – 
Gaurav
4 Апр 2013 в 21:12