我们正在尝试使用HBase来存储时间序列数据.我们目前的模型将时间序列存储为单元格中的版本.这意味着单元可能最终存储数百万个版本,并且此时间序列上的查询将使用HBase中 Get类上可用的setTimeRange方法检索一系列版本.
例如
{
"row1" : {
"columnFamily1" : {
"column1" : {
1 : "1",
2 : "2"
},
"column2" : {
1 : "1"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是在HBase中存储时间序列数据的合理模型吗?
将数据存储在多列中的备用模型(可以跨列查询)还是更合适的行?
我有兴趣知道rrdtool是否有任何替代方法来记录时间序列数据.我正在寻找可以扩展以监控大量设备的东西.
根据我在这个主题上阅读的内容,当你用大量数据点击时,rrdtool就会受到I/O限制.由于我设想这可以扩展到大量要监控的设备,我很好奇是否有任何不会阻塞I/O的替代方案.优先使用SQL,但不一定.
谢谢
我正在使用Sun的JDK 1.6.0_26和NIO(使用Netty),在lsof中我看到数百个文件描述符anon_inode
:
$ lsof -np 11225 | fgrep -w anon_inode
java 11225 nobody 57u 0000 0,9 0 1386 anon_inode
java 11225 nobody 61u 0000 0,9 0 1386 anon_inode
java 11225 nobody 65u 0000 0,9 0 1386 anon_inode
java 11225 nobody 69u 0000 0,9 0 1386 anon_inode
java 11225 nobody 73u 0000 0,9 0 1386 anon_inode
java 11225 nobody 77u 0000 0,9 0 1386 anon_inode
java 11225 nobody 81u 0000 0,9 0 1386 anon_inode
java 11225 nobody 86u 0000 …
Run Code Online (Sandbox Code Playgroud) 我试图使用python套接字而不是netcat将度量数据发送到OpenTSDB,但没有运气.有人可以告诉我是否可以这样做?
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("hostname", port))
s.send("put foo 123456789 12.9 host=dummy")
Run Code Online (Sandbox Code Playgroud)
s.send(...)
返回非零值,所以我猜这个字符串确实被发送了,只是OpenTSDB无法识别它.我试图使用netcat发送相同的字符串,它的工作原理.