2013-04-02 82 views
3

我有如下格式(〜88百万在所有):快速查找

userid age test value 
111 33 SODIUM 140 
111 34 POTASSIUM 4.1 
333 65.4 CHLORIDE 107 
444 24 BICARBONATE 24 

我需要创建在最后一列的value快速查找,鉴于前三个项目(即userid,age,test)。

什么是反复查找到这个数据的最佳方式?一个是我想到的是创建一个字典,其中keys是元组(useridagetest)和值value。在过去,我使用类似的方法,这种方法对于更小的数据非常缓慢。

+9

您使用数据库。不要在python中将8800万条记录加载到内存中。这是疯了/可笑。 –

+0

LOL ......也许http://docs.python.org/2/library/string.html#string.split – ASPiRE

+1

字典基于哈希表,这是一样快的Python可以得到的。如果这对你来说太慢了,你需要一种不同的方法。正如@MarcB所说的那样,数据库对于那些数据量更合适,但它会更慢。 –

回答

0

我在那里。 88万?如在,88,000,000?

您必须使用数据库。尝试redis以获得非常轻量级的快速查找选择。您可以使用键的前三个值。

redis甚至会给你一些漂亮的操作上的数据,你可以保存自己的往返。

+0

Euh不,你用数十亿误解数百万。它使88.000.000(只:-)) –

+0

哈哈!我确实,确实!那么使用'dict'然后:P – slezica

3

如果你不关心内存使用:在dict坚持英寸请注意,以上内容很可能会耗尽您的所有内存,除非您拥有内存的批号。做一点点,看看你可以加载多少。快速测试表明您至少需要16GB的内存。

否则:使用数据库。包含SQLite,PostgreSQL适合专业人士使用,但有许多替代品可供选择,包括NoSQL,Redis等,这可能会很好。

5

你应该使用一个数据库,你有太多的条目。数据库的工作是对这么多的数据进行查找和索引。

+7

> 5年后有人会读这个答案并说:“一个数据库?对于不到1亿条记录?可笑。” :) – Matthias

+0

如果像'C#'中的'LINQ'这样的东西被集成到其他语言中筛选并过滤我们的集合...那么是的,这可能会在将来变得过时...虽然它仍然或多或少类似于SQL语言。 –