- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 monetdb
与 node.js
连接起来。我有一个简单的(20 行)c 程序,它可以使用 mapi 库查询 moentdb
。
我可以使用这些库为使用这些库并连接到 monetdb
的 node.js
构建一些东西(模块/插件)吗?
(使用 odbc 是一种选择,但它有其自身的缺点。)
更新1:
node-ffi 非常棒。我能够很容易地创建一个获取表程序。 (例如,我已经添加了我的工作代码。)
所以如果我有3个选项
1.ODBC
2. Node -ffi
3. 一个获取数据库数据并通过套接字监听来自node.js的连接的c程序
就性能而言,如果我没有足够的时间为 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 的异步功能,因此请将其用于婴儿步骤
最佳答案
虽然 FFI 使调用 native 代码变得容易,但您真的不应该将它用于您必须经常做的事情,例如调用数据库库。来自文档:
There is non-trivial overhead associated with FFI calls. Comparing a hard-coded binding version of strtoul() to an FFI version of strtoul() shows that the native hard-coded binding is orders of magnitude faster. So don't just use the C version of a function just because it's faster. There's a significant cost in FFI calls, so make them worth it.
换句话说,FFI 有效,但慢。如果您只需要调用几个电话,这很好,但如果您需要频繁调用电话,这就非常糟糕了。
你需要做的是写一个 addon .插件是为 C 和 C++ 库提供粘合的 C++ 模块。 (仅仅因为你必须用 C++ 编写插件并不意味着你不能从插件中调用纯 C 代码!)
Node docs提供大量可以帮助您入门的示例。如果您使用的是 Windows,here's some tips设置 VS。
如果对 C 库的调用是阻塞的,您需要将它们设为异步。 libuv provides a thread pool you can do the work on.
关于javascript - 是否可以创建一个使用 c 库进行 monetdb 连接的 node.js 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574886/
在postgresql中,可以通过运行以下查询来获得所有表名称 SELECT table_name FROM information_schema.tables WHERE table_schema=
我需要将一个大型 CSV 文件导入 MonetDB,我想知道是否可以将该文件分成两部分并运行两个脚本,例如: mclient -u monetdb -d mydb < import1.sql mcli
我正在阅读 MonetDB Internal Description因为我有兴趣直接在 MonetDB 代数语言 (MAL) 而不是 SQL 前端中实现一个特殊过程(我希望通过这样做获得更多性能)。以
我有一个包含字符串列表(一列)的文件。文件示例 sdfsdfsdf hfhfhfghf dfgdggdfg pookokkoo 根据 monetdb 网站上的文档,我必须创建一个 BAT 文件。 如何
我对使用 monetdb 作为数据集市非常感兴趣,保存一些巨大的数据表用于查询和报告 但是,经过一番搜索,我找不到任何有关他们在任何生产能力中使用 Monetdb 的在线帖子/博客。 此外,关于 Mo
如何导出 monetdb 查询结果(例如导出到 csv 文件)? 手册说: Copy into File The COPY INTO command with a file name argument
Monetdb 是否支持像 Postgresql 中的 concat_ws 这样的字符串函数 (http://www.postgresql.org/docs/9.1/static/functions-
我尝试编译 test application适用于 Ubuntu 14.04 LTS Trusty Tahr 下的 MonetDB。我按照 official site 的下载说明进行操作,安装成功,然
我正在尝试为远程连接打开 monetdb 服务器。我知道默认情况下服务器只允许来自本地主机的连接。通过设置mapi_open=true,mserver5允许远程连接。服务器使用守护程序 monetdb
我正在测试 MonetDB,并在我的笔记本电脑上查询数百万行时获得惊人的性能。 我希望在生产中处理数十亿,我需要尽可能频繁地更新数据,假设每 1 分钟或 5 分钟最坏的情况。只需更新现有记录或添加新记
MonetDB 似乎支持相当全面的一组 系统目录 View 为了发现数据库的模式结构。不幸的是,我似乎找不到可以获取 的 SQL 查询。给定键或索引的列集 .以下是 Tables 表报告的系统表/ V
我已经将 1.5 亿条记录加载到 MonetDB 中。所有数据都插入到一个表中。该表没有任何约束(例如 UNIQUE , ..)。我自己没有创建任何索引。原始源CSV文件约为7.2 GB,导入数据库后
有没有办法使用 MonetDB.R 进行批量插入(而不是通过 for 循环和 dbSendUpdate)? dbWriteTable 是否允许更新 (append=TRUE)? 关于“INSERT I
这让我抓狂,我在想我一定是错过了一些非常明显的东西。我们正在使用 SQiurrel 设置一个 MonetDB 环境。我虽然面临的挑战是连接所有这些并让驱动程序工作,但事实证明它正在运行,我可以看到数据
我正在尝试声明一个查询字符串以在 MonetDB 中执行。文档并不清楚这是否可行,但其他引擎允许此功能(例如 MySQL 和 MS SQL Sever)。尝试以下操作 execute 'select
我很困惑 at 符号变量是否可以在 MonetDB 中工作。是标准 SQL 还是只是 mySQL? (参见例如 this 在这里回答。)MonetDB 声称支持 SQL:2003 (完整功能列表 he
我使用 monetdb,上面有两个数据库“mydb”和“test”。 我想将“mydb”中的值子集获取到“test”中。 我的代码: insert into test.result select s
我是 MonetDB 的新手。我已遵循此安装指南 http://www.monetdb.org/Documentation/Guide/Installation我在创建数据库时遇到了问题。这是错误 m
我想知道您是否认为使用 monetdb(或其他列式数据库)将所有数据放在一个大的平面表中而不是将其分解成几个相关的表是否合理。 例如,二手车数据库可能如下所示: Make Model Yea
我在 Windows 2012 Server 上安装了最新的(MonetDB 5 服务器 v11v.27.5“Jul2017-SP1”),我正在尝试在 2-3 秒的合理时间内查询 14 亿行的大表。
我是一名优秀的程序员,十分优秀!