- 主题:求问如何从10亿个字符串里快速取数据
单机如果内存放不下的话,应该用rocksdb。
--
FROM 103.208.15.*
redis支持集群,1台不够就两台,另外你的机器不是128g么,本地hashmap存储不行么
--
FROM 61.48.14.*
不压缩100GB,现在好点的ssd顺序读取8000MB/s (要多线程)
大概13秒读完一遍,这就比3分钟快了十多倍了
【 在 chemphy123 的大作中提到: 】
: 我有10亿个字符串,每个大概100个字符。
: 这些数据存磁盘上,gzip压缩后大概有18G。
: 需求是,一次按id号从中取20000个字符串出来。
: ...................
--
FROM 183.158.187.*
TerarkDB如何?
【 在 jeric 的大作中提到: 】
: 单机如果内存放不下的话,应该用rocksdb。
--
FROM 113.208.113.*
可以吧,如果对外服务用的话,就可以成为除了字节跳动外的唯一使用者了?
【 在 xiaoda 的大作中提到: 】
: TerarkDB如何?
--
FROM 61.151.228.*
并发不大的话可以存到clickhouse里,取出来很快
【 在 chemphy123 的大作中提到: 】
: 我有10亿个字符串,每个大概100个字符。
: 这些数据存磁盘上,gzip压缩后大概有18G。
: 需求是,一次按id号从中取20000个字符串出来。
: ...................
--
FROM 221.219.100.*
要把k,v都存进去。
单机搞这个我会选clickhouse
会python的话可以选duckdb,列存可以处理上亿数据
【 在 chemphy123 的大作中提到: 】
: 请问大神128G内存够吗?
: Redis是把整库的key和value全部载入内存吗?
--
修改:lokta FROM 223.104.94.*
FROM 223.104.94.*
试了下DUCKDB,查询时间7,8秒
放parquet会更慢点,但是更省内存。
作分析够用了,但是如果是作为查询服务得用其他方法。
import duckdb
import random
row_count = 1_000_000_000
conn = duckdb.connect()
conn.execute("create table test_table(id integer);")
sql = """insert into test_table select id from generate_series(%s) t(id);""" % row_count
conn.execute(sql)
data_list = [str(i) for i in random.choices(range(row_count), k=20000)]
conn.execute("select * from test_table where id in (%s)" % ','.join(data_list));
result = conn.fetchall()
【 在 chemphy123 的大作中提到: 】
: 我有10亿个字符串,每个大概100个字符。
: 这些数据存磁盘上,gzip压缩后大概有18G。
: 需求是,一次按id号从中取20000个字符串出来。
: ...................
--
FROM 223.104.94.*
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.*