从关键不到一定价值的哈希获得所有价值的有效方法

时间:2014-03-12 18:33:56

标签: ruby algorithm sorting data-structures

我们每秒从10个来源收集数据。我试图想出一种方法将数据存储在内存中,这样我就可以获得数据,例如"数据的每个点从12:01到12:02"。

我考虑过使用某种树或排序列表。关键是收集的时间,值将是一系列测量值。我无法想到怎么说"给我这个范围内钥匙的所有价值"。我只能想到使用这些结构的排序特性来快速获取某个键的值。

我是否需要计算适当的密钥(12:01:00,12:01:01,...,12:01:59)并单独提取每个值或者是否有某些方法可以使用排序数据结构,以便立即获取所有数据?

1 个答案:

答案 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