栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

ClickHouse:A股分钟数据的查询速度的测试[下]

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ClickHouse:A股分钟数据的查询速度的测试[下]

说明:
1、my_db.stock_tb: 是一个22亿行,大约15列的大表且是单一表,压缩后的空间在50G,压缩率约30倍;
此表存了2010年以来的所有A股的1分钟线数据。为什么要设计成单一表,主要也就是想做一下压测。
2、我在家用电脑中WSL2下进行的单机方式测试,内存32G。
3、未作分区安排[特别说明]

下面就上述表进行简单测试。

1、LIMIT N测试

def get_data_from_ch(): # startdate : 2010-01-01
    
    client = Client('localhost')
    database_name = "my_db"
    table_name = 'stock_tb'
    code = "600036.XSHG"
    query_sql = f'SELECt * FROM {database_name}.{table_name}  LIMIT 10000000'
    print(query_sql)
    data = client.execute(query_sql)
    return data
t0 = time.time()
data = get_data_from_ch()
t1 = time.time()
print(f"get_data cost time : {t1-t0} s! ")

进行了不同LIMIT次数的测试:

python端:
clickhouse-client端:

2、条件查询测试
(1)、单条件

def get_data_from_ch(): # startdate : 2010-01-01
    
    client = Client('localhost')
    database_name = "my_db"
    table_name = 'stock_tb'
    code = "600036.XSHG"
    query_sql = f"SELECt * FROM {database_name}.{table_name} WHERe code = '{code}' LIMIT 10"
    print(query_sql)
    data = client.execute(query_sql)
    return data
t0 = time.time()
data = get_data_from_ch()
t1 = time.time()
print(f"get_data cost time : {t1-t0} s! ")

(2)、标的和日期的多条件查询

def get_data_from_ch_by_code_and_datetime():
    client = Client('localhost')
    database_name = "my_db"
    table_name = 'stock_tb'
    startdate = "2018-01-01"
    enddate = "2022-02-02"
    code = "600036.XSHG"
    query_sql = f"SELECt * FROM {database_name}.{table_name} WHERe code ='{code}' AND toDate(datetime) >= toDate('{startdate}')  AND toDate(datetime) <= toDate('{enddate}') "
    print(query_sql)
    data = client.execute(query_sql)
    print(f"data : {len(data)}")
    return data

t0 = time.time()
data = get_data_from_ch_by_code_and_datetime()
t1 = time.time()
print(f"get_data cost time : {t1-t0} s! ")

python端:

clickhouse端:
(3) 跨品种查询

f"SELECt * FROM {database_name}.{table_name} WHERe toDate(datetime) >= toDate('{startdate}')  AND toDate(datetime) <= toDate('{enddate}') "

换了不同的时段,速度基本差不多。相当于查询近一年的全A股市 的数据花的时间。

目前看,总体还算凑合,当然其主要优势在于跨品种查询上优势还是比较明显;但单一品种的查询优势不太明显。

但在小样本数据的查询上,比如对于某个标的,需要查5-10万量级的数据,这个优势不太明显。这种感觉更适合TDengine的场景。

还有哪些可以提高性能优化的点? 分库分表?异步读取?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号