我们每秒从10个来源收集数据。我试图想出一种方法将数据存储在内存中,这样我就可以获得数据,例如"数据的每个点从12:01到12:02"。
我考虑过使用某种树或排序列表。关键是收集的时间,值将是一系列测量值。我无法想到怎么说"给我这个范围内钥匙的所有价值"。我只能想到使用这些结构的排序特性来快速获取某个键的值。
我是否需要计算适当的密钥(12:01:00,12:01:01,...,12:01:59)并单独提取每个值或者是否有某些方法可以使用排序数据结构,以便立即获取所有数据?
答案 0 :(得分:0)
使用ruby Hash无法做到这一点,并且没有一种简单的方法可以自己实现它。您必须实现二叉树/ B树/ redblack树以及用于执行范围查询的漂亮API。
我的建议是使用内存中的sqlite数据库。然后你可以用熟悉的sql语法查询它。 Sqlite是一个非常完善的项目,我想这将是非常节省空间和时间的。
require 'sqlite3'
@db = SQLite3::Database.new ":memory:"
@db.execute <<-SQL
create table records(
id integer primary key autoincrement,
timestamp integer,
data text
);
SQL
@db.execute <<-SQL
select * from records where ...
SQL
在此处阅读sqlite数据类型:http://www.sqlite.org/datatype3.html