#csv #索引 #文本文件 #grep #数据库

app text_index

扫描文本文件,构建排序索引,持久化,查询

2个版本

0.1.1 2019年3月26日
0.1.0 2019年3月3日

#228数据库实现

每月 22 次下载

MIT 许可证

45KB
1K SLoC

text_index

闪电般的csv文件索引、持久化和查询

是什么?

这个实用工具在你处理20GB+的csv文件时开始变得有意义,这些文件在进入数据库之前需要一些手动预处理,或者你只是想玩玩。

你可以为任何csv列构建索引,作为文本、整数或浮点类型。索引将存储在磁盘上,通常为文本列原始大小的3%左右。解析使用优秀的csv crate执行,在我的2014年macbook上索引64列文件时,处理速度约为800K条记录/秒(所有线程合并)。

查询通常在~100毫秒的等值查找(范围较慢)。索引是分片存储的,因此查找时间不应随着输入大小的增加而显著增加。

使用方法

构建索引

你可以选择将列索引为文本(str)、整数(int)或浮点数(float)。

USAGE:
    text_index <INPUT> index <COLUMN> [TYPE]

OPTIONS:
    -t <THREADS>     Max number of THREADS
    -v               Verbose output (-v, -vv supported)

ARGS:
    <COLUMN>    Column number (starts at 1)
    <TYPE>      Type (str(default), int, float)

例如:text_index input.csv -t 4 index 1 str

查询索引

USAGE:
    text_index <INPUT> filter <COLUMN> <OP> <VALUE> [VALUE2]

ARGS:
    <COLUMN>    Column number (starts at 1)
    <OP>        Operator (eq, lt, le, gt, ge, in, pre (starts with))
    <VALUE>     Value
    <VALUE2>    Value2 (when operator is `in`)

例如:text_index input.csv filter 1 eq "search_string"

未来

  • 支持更多文本文件格式,如换行分隔的json或日志文件
  • 多线程查询
  • 支持gzip压缩的输入文件
  • 交换友好的索引(限制内存使用)

依赖

~5–7MB
~114K SLoC