- 主题:求问如何从10亿个字符串里快速取数据
我有10亿个字符串,每个大概100个字符。
这些数据存磁盘上,gzip压缩后大概有18G。
需求是,一次按id号从中取20000个字符串出来。
这20000个id号是分散的,不集中。
我尝试了用h5py按hdf5格式存储和读取,试了多种途径,速度都比较慢,大概在3分钟左右。
hdf5取连续的20000数据比较快,但是从10亿个数据里取分散的20000个数据就比较慢。
求问有没有好方法,快速取数据。
我隐隐约约觉得这是大数据查询里面常碰到的场景,求大神赐教
--
修改:chemphy123 FROM 180.168.176.*
FROM 180.168.176.*
我搜了一下,貌似一种叫key-value的数据库适合我这应用场景
redis我可以用吗?
网上说是把数据都载入内存,我没搞懂redis到底把啥载入内存。
我这数据解压出来大概有100G,redis会都load到内存里吗?
如果都载入,内存肯定不够用的。
【 在 zeus2615 的大作中提到: 】
: 随便找个大数据的引擎把你的数据导进去就可以了。
: 如果你想要自己开发这部分的话,参考野猪书的存储和索引部分
--
修改:chemphy123 FROM 180.168.176.*
FROM 180.168.176.*
多谢大神指点。
我是想本地用redis的,机器内存有128G ,redis能够完成我的需求场景吗?
请问redis载入内存是啥意思,是整个库的key和value全部进内存吗?
【 在 xuanqing 的大作中提到: 】
: 具体实现你其实不用管的
: 想快就要进内存, 内存不够就要分批整, 自然就快不起来
: 随机查询快, 本地小内存运行, 通用软件
: ...................
--
FROM 180.168.176.*
请问大神128G内存够吗?
Redis是把整库的key和value全部载入内存吗?
【 在 lokta 的大作中提到: 】
: 可以用,取决于你想付出什么代价来达到你想要的效果。
: redis把数据全部加载到内存,如果内存不够,就是使用LRU淘汰掉旧数据(还有其他策略,防杠)
: 一台机器不够,可以搞个redis集群,让内存足够大。
: ...................
--
FROM 180.168.176.*
Duckdb这么快?
我捣鼓了一下午的rocksdb-python,
当数据库是1亿记录的时候,取20000数据还比较快,可以秒出。
但是当数据库得到10亿记录的时候,取20000数据就慢了,达到1分10秒。
我晚上再测测DuckDB,DUCKDB号称继承了sqlite的优点,如果速度快的话,还是蛮爽的。
【 在 lokta 的大作中提到: 】
: 试了下DUCKDB,查询时间7,8秒
: 放parquet会更慢点,但是更省内存。
: 作分析够用了,但是如果是作为查询服务得用其他方法。
: ...................
--
FROM 180.168.176.*
你的硬盘是SSD吗?
【 在 lokta 的大作中提到: 】
: 试了下DUCKDB,查询时间7,8秒
: 放parquet会更慢点,但是更省内存。
: 作分析够用了,但是如果是作为查询服务得用其他方法。
: ...................
--
FROM 223.104.213.*
多谢,纯粹科研用的,就我自己一个人用,一天只请求一百次左右。
【 在 iidev9 的大作中提到: 】
: 先确定一下你的业务场景:
: 这些数据是用作科研分析,就你们一个小团队内部用,还是用在商业服务里,要求每秒处理n多请求?
--
FROM 180.168.176.*
这个DUCKDB确实很神奇,我的是普通硬盘,我需要25s,
这个速度竟然比rocksdb快。
我再试试create index, 看看能不能再快一点。
【 在 lokta 的大作中提到: 】
: 试了下DUCKDB,查询时间7,8秒
: 放parquet会更慢点,但是更省内存。
: 作分析够用了,但是如果是作为查询服务得用其他方法。
: ...................
--
FROM 180.168.176.*
求问大佬duckdb,一般需要create index吗?
我测了几个,如果create index,并不会加速。
以前用mysql的时候,我记得create index会加快搜索速度十倍。
这个duckdb不知道是什么原理
【 在 lokta 的大作中提到: 】
: 试了下DUCKDB,查询时间7,8秒
: 放parquet会更慢点,但是更省内存。
: 作分析够用了,但是如果是作为查询服务得用其他方法。
: ...................
--
FROM 180.168.176.*
每个字符串最大300个字符,多数字符的长度集中在60~100左右
这里关键是这20000个需要的字符串,一般是分散开的,不集中,需要访问的磁盘量多
【 在 abettor 的大作中提到: 】
: 请问你的key是什么啊,0到10亿的整型
: 还是任意的字符串?
: 2万个100byte 也就是2M,
: ...................
--
FROM 180.168.176.*