Python中的文件索引(使用二叉树?)

Gre*_*ind 4 python algorithm indexing binary-tree

背景

我有许多(数千!)数据文件,这些数据文件采用标准的基于字段的格式(想象制表符分隔,每行中每个文件中的相同字段).我正在讨论使这些数据可用/可搜索的各种方法.(一些选项包括RDBMS,NoSQL的东西,使用grep/awk和朋友等).

提案

特别是,一个吸引我的想法是以某种方式"索引"文件.由于这些文件是只读的(和静态的),我想象一些包含二叉树的持久文件(每个索引字段一个,就像在其他数据存储中一样).我对如何做到这一点持开放态度,或者听说这只是疯了.大多数情况下,我最喜欢的搜索引擎并未为此提供任何预先解决的解决方案.

我意识到这有点不合理,欢迎解决方案.

额外细节

  • 文件很长,不宽
    • 每小时数百万行,每小时传播超过100个文件
    • 标签分隔,列数不多(~10)
    • 字段很短(比如每个字段<50个字符)
  • 查询在字段,字段组合上,并且可以是历史的

各种解决方案的缺点:

(所有这些都是基于我的观察和测试,但我愿意纠正)

BDB

  • 缩放到大文件大小有问题(根据我的经验,一旦他们大约2GB,性能可能会很糟糕)
  • 单一作家(如果有可能解决这个问题,我想看看代码!)
  • 很难做多个索引,即一次索引不同的字段(确保你可以通过反复复制数据来做到这一点).
  • 因为它只存储字符串,所以有一个序列化/反序列化步骤

RDBMS中

胜利:

  • 平台模型非常适合查询,索引

损失:

  • 根据我的经验,问题来自索引.从我所看到的(如果我错了请纠正我),rdbmses的问题我知道(sqlite,postgres)支持批量加载(然后索引在结尾很慢),或逐行加载(这是低).也许我需要更多的性能调整.

Jon*_*erg 5

为什么重新发明轮子?无论如何,索引文件,但使用WhooshLucene等.

编辑:我在发布此答案时没有说明您的性能要求.您无法使用现成的软件索引"每小时数百万行".