Gau*_*rav 5 javascript database monetdb node.js node-ffi
我正在尝试monetdb
与之联系node.js
.我有一个简单的(20行)c程序,可以moentdb
使用mapi库进行查询.
我可以使用这些库来构建node.js
使用这些库并连接到的东西(模块/插件)monetdb
吗?
(使用odbc是一种选择,但它有其自身的缺点.)
Update1:
node-ffi非常棒.我能够很容易地创建一个fetch表程序.(例如,我添加了我的工作代码.)
所以,如果我有3个选项
1. ODBC
2. node-ffi
3. ac程序获取数据库数据并通过socket监听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));
}
Run Code Online (Sandbox Code Playgroud)
更新2:
以上代码不建议用于生产用途...它不使用node.js的异步功能,所以请将它用于婴儿步骤
虽然 FFI 可以轻松调用本机代码,但您确实不应该将其用于必须经常执行的操作,例如调用数据库。来自文档:
FFI 调用会带来不小的开销。将 strtoul() 的硬编码绑定版本与 strtoul() 的 FFI 版本进行比较表明,本机硬编码绑定的速度要快几个数量级。因此,不要仅仅因为函数的 C 版本更快而使用它。FFI 通话的费用很高,所以要让它们物有所值。
换句话说,FFI 可以工作,但速度很慢。如果您只需要拨打几个电话,这很好,但如果您需要频繁拨打电话,那就很糟糕了。
您需要做的是编写一个插件。插件是为 C 和 C++ 库提供粘合的 C++ 模块。(仅仅因为您必须用 C++ 编写插件并不意味着您不能从插件调用纯 C 代码!)
节点文档提供了大量可以帮助您入门的示例。如果您使用的是 Windows,这里有一些设置 VS 的提示。
如果对 C 库的调用是阻塞的,则需要使它们异步。 libuv 提供了一个线程池,您可以在其上完成工作。
归档时间: |
|
查看次数: |
1750 次 |
最近记录: |