2014-03-12 34 views
3

我們每秒從10個源收集數據。我試圖想出一種方法來將數據存儲在內存中,這樣可以讓我獲得像「每點數據從12點01分到12點02分」的數據。從密鑰中獲取所有值的有效方法低於特定值

我想過使用某種樹或排序列表。關鍵是收集的時間和價值將是一個測量數組。我想不出如何說「給我這個範圍內的所有鑰匙的價值」。我只能想到使用這些結構的排序特性來快速獲取某個鍵的值。

我是否需要計算相應的鍵(12:01:00,12:01:01,...,12:01:59),並將這些值分別拉出來,還是有一些方法可以利用一個有序的數據結構來同時獲得我所有的數據?

+0

[Redis的](http://redis.io),[VoltDB](http://voltdb.com/),[拂曉](HTTP ://propublica.github.io/daybreak/)... –

+0

我以爲Redis只是一個關鍵/價值商店。是否有一些額外的功能來操作按鍵? –

+0

我不明白。不是你想要的只是一個範圍查詢,對吧?任何經過排序的數據結構都可以爲您提供,如果您將數據存儲在有序數組中,爲什麼只能查詢給我所有12:01--12:05之間的元素?但是由於你顯然需要插入很多,我建議你使用B +樹。 – Leo

回答

0

有沒有辦法做到這一點與紅寶石哈希,並沒有一個簡單的方法來實現它自己。你將不得不實現一個二叉樹/ B-tree/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 

閱讀有關源碼數據類型此處:http://www.sqlite.org/datatype3.html

相關問題