我非常有兴趣使用monetdb作为数据集市,为查询和报告提供了一些巨大的数据表
但是,经过一番搜索,我无法找到任何关于他们在任何生产能力中使用Monetdb的在线帖子/博客.
此外,关于Monetdb的在线活动似乎很少或几乎没有.
这对Monetdb的未来是个坏兆头吗?
有没有人有使用MonetDB的经验?目前,我的MySQL数据库越来越大,查询速度太慢.根据面向列的范例,插入将更慢(我根本不介意),但数据检索变得非常快.通过切换到MonetDB,我是否有机会获得更多的数据检索性能?MonetDB足够成熟吗?
我在R中使用MonetDBLite创建了一个大型数据库,现在我想访问R之外的数据库(例如,使用通用数据库GUI).
有没有办法做到这一点?我不想复制数据,因为我仍然希望通过R访问它.我不需要从R和SQL GUI同时访问数据库,但我想根据需要在两者之间切换.
我正在建立系统来分析有关证券交易价格的大量金融数据.这方面的一个重大挑战是确定数据将使用哪种存储方法,因为数据将在10的TB级中.将对数据进行许多查询,例如取平均值,计算标准偏差以及按多个列过滤的总和,例如价格,时间,数量等.连接语句不是必需的,但是很高兴.
现在,我正在寻找infobright社区版,monetdb和greenplum社区版用于评估目的.到目前为止,它们看起来很棒,但是对于更高级的功能,某些版本中不提供某些功能(使用多个服务器,插入/更新语句等).
您将在这种情况下使用哪些解决方案,并为替代方案提供哪些好处?具有成本效益是一个重要的优点.如果我必须支付数据仓库解决方案,我会,但我宁愿避免它,并尽可能采用开源/社区版路线.
我读过proc/<pid>/io
来测量SQL查询的IO活动,其中<pid>
是数据库服务器的PID.我读取每个查询之前和之后的值以计算差异并获得请求被读取和/或写入的字节数.
据我所知,该字段READ_BYTES
计算实际的磁盘IO,同时RCHAR
包含更多内容,例如linux页面缓存可以满足的读取(请参阅了解/ proc/[pid]/io中的计数器以 进行说明).这导致了假设,即RCHAR
应该得到一个等于或大于的值READ_BYTES
,但我的结果与这个假设相矛盾.
我可以想象我为Infobright ICE得到的一些小块或页面开销(值为MB):
Query RCHAR READ_BYTES
tpch_q01.sql| 34.44180| 34.89453|
tpch_q02.sql| 2.89191| 3.64453|
tpch_q03.sql| 32.58994| 33.19531|
tpch_q04.sql| 17.78325| 18.27344|
Run Code Online (Sandbox Code Playgroud)
但我完全不理解MonetDB的IO计数器(值为MB):
Query RCHAR READ_BYTES
tpch_q01.sql| 0.07501| 220.58203|
tpch_q02.sql| 1.37840| 18.16016|
tpch_q03.sql| 0.08272| 162.38281|
tpch_q04.sql| 0.06604| 83.25391|
Run Code Online (Sandbox Code Playgroud)
我错误的假设RCHAR
包括READ_BYTES
?有没有办法欺骗内核计数器,MonetDB可以使用?这里发生了什么?
我可能会补充一点,我清除页面缓存并在每次查询之前重新启动数据库服务器.我在Ubuntu 11.10上运行内核3.0.0-15-generic.
我正在尝试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的异步功能,所以请将它用于婴儿步骤
运行MonetDB数据库服务器工具包v1.1(2013年2月-SP6)
这个查询
select rowtype, min(zdate), max(zdate) , count(*)
from fdhista
group by rowtype
;
Run Code Online (Sandbox Code Playgroud)
返回每个行类型的正确最小和最大日期.
rowtype L1 L2 L3
3 1970-12-31 2009-07-31 1664186
1 2003-02-24 2013-09-13 11649306
Run Code Online (Sandbox Code Playgroud)
这个查询,在同一个表上
select min(zdate), max(zdate), count(*) from fdhista where rowtype=3;
Run Code Online (Sandbox Code Playgroud)
似乎"忽略"了where子句,返回
L1 L2 L3
1970-12-31 2013-09-13 13313492
Run Code Online (Sandbox Code Playgroud)
我还没有找到一个通用的sql先例(尚未).这是预期的反应吗?
我在期待这个
L1 L2 L3
1970-12-31 2009-07-31 1664186
Run Code Online (Sandbox Code Playgroud)
我在Oracle和SQL Server中尝试了类似的查询,并取回了我预期的响应.然而,我发现支持"忽略"where子句的通用sql注释.也许这是MonetDB使用特定SQL标准的情况?
在postgresql中,可以通过运行以下查询来获取所有表名
SELECT table_name FROM information_schema.tables WHERE table_schema='public';
Run Code Online (Sandbox Code Playgroud)
在monetdb中有类似的东西可以得到表的列表吗?
我SQL
在非常简单的表上运行查询.这些表使用此处介绍的"垂直分区"对RDF图进行建模.因此,它们都具有以下模型,其中s
是"主体"并且o
是对象.
CREATE TABLE a_table (BIGINT s, BIGINT o)
Run Code Online (Sandbox Code Playgroud)
鉴于我449669
在表中有元组存储prop_eventPrecedeInTask
.运行了以下查询(在表上有4个自联接prop_eventPrecedeInTask
)353 ms
SELECT t1.s AS event1, t2.o AS event2, t3.o AS event3,
t4.o AS event4, t5.o AS event5, t6.o AS event6
FROM "prop_SystemCallIsExecutedDuringTask" t1,
"prop_eventPrecedeInTask" t2,
"prop_eventPrecedeInTask" t3,
"prop_eventPrecedeInTask" t4,
"prop_eventPrecedeInTask" t5,
"prop_eventPrecedeInTask" t6
WHERE t1.o = 15667
AND t1.s = t2.s
AND t2.o = t3.s
AND t3.o = t4.s
AND t4.o = t5.s
AND t5.o = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R + MonetDB作为大数据分析堆栈,但是在创建新列并使用我的分析数据填充它时遇到了问题.这是一个玩具示例:
library(MonetDBLite)
library(DBI)
data(mtcars)
db <- dbConnect(MonetDB.R::MonetDB(), embedded="./test.db")
# load mtcars into the database
dbWriteTable(conn=db, value = mtcars, name = "mtcars", overwrite=TRUE)
## Add a new column
dbSendQuery(db, "ALTER TABLE mtcars ADD v1 DOUBLE;")
## insert data into the new column
v1 <- mtcars["mpg"] * pi
dbSendQuery(db, "INSERT INTO mtcars (v1) VALUES (?)", bind.data=v1)
Run Code Online (Sandbox Code Playgroud)
并且错误消息:
Error in .local(conn, statement, ...) :
Unable to execute statement 'INSERT INTO mtcars (v1) VALUES ('c(65.9734457253857, 65.9734457253857, 71.6283125018473, 67.23008278...'.
Server says 'ERROR: 49.6371639267187, …
Run Code Online (Sandbox Code Playgroud) monetdb ×10
database ×4
monetdblite ×2
r ×2
sql ×2
greenplum ×1
infobright ×1
io ×1
javascript ×1
join ×1
linux ×1
linux-kernel ×1
node-ffi ×1
node.js ×1
performance ×1
procfs ×1
self-join ×1