- 主题:求问如何从10亿个字符串里快速取数据
请问你的key是什么啊,0到10亿的整型
还是任意的字符串?
2万个100byte 也就是2M,
我觉得ssd硬盘,随机取,秒级别没问题吧
【 在 chemphy123 (chemphy) 的大作中提到: 】
: 我有10亿个字符串,每个大概100个字符。
: 这些数据存磁盘上,gzip压缩后大概有18G。
:
: 需求是,一次按id号从中取20000个字符串出来。
--
FROM 221.216.141.*
我正好有时间,明天我写个程序验证一下
这个问题的关键是建好索引
【 在 chemphy123 (chemphy) 的大作中提到: 】
: 我有10亿个字符串,每个大概100个字符。
: 这些数据存磁盘上,gzip压缩后大概有18G。
:
: 需求是,一次按id号从中取20000个字符串出来。
--
FROM 221.216.141.*
你是对的
我亲自写程序验证了, 10亿条数据仅需把offset存储到内存, 查询2万条平均耗时300ms以下.
机器: m1 16GB
数据量: 10亿条
数据大小: 100GB
程序内存使用量: 10GB
以下是我测试多次的耗时:
>>> get 20000
get offsets elapses: 89ms
get data elapses: 175ms
write results elapses: 5ms
>>> get 20000
get offsets elapses: 140ms
get data elapses: 195ms
write results elapses: 6ms
>>> get 20000
get offsets elapses: 124ms
get data elapses: 262ms
write results elapses: 6ms
>>> get 20000
get offsets elapses: 120ms
get data elapses: 177ms
write results elapses: 5ms
【 在 chunhui 的大作中提到: 】
: 如果不用现成的kv数据库自己弄,其实不用把字符串加载到内存,只把key加载到内存即可。key指向数据文件的便宜位置。
: 这样内存不需要很多,查找速度飞快,找到key之后根据偏移位置再读字符串。
--
修改:abettor FROM 36.110.18.*
FROM 36.110.18.*
我模拟的是90~120长度不等的字符串, 小于500ms就能返回2万结果
随机读取磁盘耗时并不多, 有一半花费在查索引上
【 在 chemphy123 的大作中提到: 】
: 每个字符串最大300个字符,多数字符的长度集中在60~100左右
: 这里关键是这20000个需要的字符串,一般是分散开的,不集中,需要访问的磁盘量多
:
--
FROM 36.110.18.*