- 主题:求问如何从10亿个字符串里快速取数据
可以用radix tree试试,还能压缩一定空间,说不定能加载到内存中
--
FROM 112.64.61.*
如果是自己编程读文件,需要你的语言是静态语言,这样才有足够缓存命中
如果是数据库,感觉很多都可以,没试过
【 在 chemphy123 的大作中提到: 】
: 我有10亿个字符串,每个大概100个字符。这些数据存磁盘上,gzip压缩后大概有18G。需求是,一次按id号从中取200 ...
--
FROM 221.218.143.*
求问大佬duckdb,一般需要create index吗?
我测了几个,如果create index,并不会加速。
以前用mysql的时候,我记得create index会加快搜索速度十倍。
这个duckdb不知道是什么原理
【 在 lokta 的大作中提到: 】
: 试了下DUCKDB,查询时间7,8秒
: 放parquet会更慢点,但是更省内存。
: 作分析够用了,但是如果是作为查询服务得用其他方法。
: ...................
--
FROM 180.168.176.*
请问你的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.*
每个字符串最大300个字符,多数字符的长度集中在60~100左右
这里关键是这20000个需要的字符串,一般是分散开的,不集中,需要访问的磁盘量多
【 在 abettor 的大作中提到: 】
: 请问你的key是什么啊,0到10亿的整型
: 还是任意的字符串?
: 2万个100byte 也就是2M,
: ...................
--
FROM 180.168.176.*
offset是啥?
可以用python实现吗?
我只会python
【 在 abettor 的大作中提到: 】
: 你是对的
: 我亲自写程序验证了, 10亿条数据仅需把offset存储到内存, 查询2万条平均耗时300ms以下.
: 机器: m1 16GB
: ...................
--
FROM 180.168.176.*
赞
【 在 abettor 的大作中提到: 】
: 你是对的
: 我亲自写程序验证了, 10亿条数据仅需把offset存储到内存, 查询2万条平均耗时300ms以下.
: 机器: m1 16GB
: ...................
--
FROM 111.196.134.*
我模拟的是90~120长度不等的字符串, 小于500ms就能返回2万结果
随机读取磁盘耗时并不多, 有一半花费在查索引上
【 在 chemphy123 的大作中提到: 】
: 每个字符串最大300个字符,多数字符的长度集中在60~100左右
: 这里关键是这20000个需要的字符串,一般是分散开的,不集中,需要访问的磁盘量多
:
--
FROM 36.110.18.*