python读取通达信每日数据和五分钟数据,并且上传到clickhouse( 三 )


搭建数据库 的性能 单个大查询的吞吐量
吞吐量可以使用每秒处理的行数或每秒处理的字节数来衡量 。如果数据被放置在page cache中,则一个不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理(对于简单的查询,速度可以达到30GB/s) 。如果数据没有在page cache中的话,那么速度将取决于你的磁盘系统和数据的压缩率 。例如,如果一个磁盘允许以400MB/s的速度读取数据,并且数据压缩率是3,则数据的处理速度为1.2GB/s 。这意味着,如果你是在提取一个10字节的列,那么它的处理速度大约是1-2亿行每秒 。
对于分布式处理,处理速度几乎是线性扩展的,但这受限于聚合或排序的结果不是那么大的情况下 。
处理短查询的延迟时间
如果一个查询使用主键并且没有太多行(几十万)进行处理,并且没有查询太多的列,那么在数据被page cache缓存的情况下,它的延迟应该小于50毫秒(在最佳的情况下应该小于10毫秒) 。否则,延迟取决于数据的查找次数 。如果你当前使用的是HDD,在数据没有加载的情况下,查询所需要的延迟可以通过以下公式计算得知: 查找时间(10 ms) * 查询的列的数量 * 查询的数据块的数量 。
处理大量短查询的吞吐量
在相同的情况下,可以在单个服务器上每秒处理数百个查询(在最佳的情况下最多可以处理数千个) 。但是由于这不适用于分析型场景 。因此我们建议每秒最多查询100次 。
数据的写入性能
我们建议每次写入不少于1000行的批量写入,或每秒不超过一个写入请求 。当使用tab-格式将一份数据写入到表中时,写入速度大约为50到200MB/s 。如果您写入的数据每行为1Kb,那么写入的速度为50,000到200,000行每秒 。如果您的行更小,那么写入速度将更高 。为了提高写入性能,您可以使用多个进行并行写入,这将带来线性的性能提升 。

python读取通达信每日数据和五分钟数据,并且上传到clickhouse

文章插图
引擎
该引擎和的不同之处在于它会删除排序键值相同的重复项 。
数据的去重只会在数据合并期间进行 。合并会在后台一个不确定的时间进行,因此你无法预先作出计划 。有一些数据可能仍未被处理 。尽管你可以调用语句发起计划外的合并,但请不要依靠它,因为语句会引发对数据的大量读写 。
因此, 适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现 。挺适合股票分析,因此主要用这个
搭建过程
安装 |Docs
请直接参考官方文件,里面有详细的描述,另外,数据大约为40g,历史的五分钟数据和day数据,我用的是腾讯云服务器
数据上传代码
from clickhouse_driver import Clientimport refrom tqdm import tqdmimport osimport pandas as pdimport user_config as ucfgclient = Client('ip',database='jj', user='c',password='password',settings={"use_numpy":True})file_list = os.listdir(ucfg.tdx['csv_lday'])tq = tqdm(file_list, leave=False, position=None)for filename in tq:df=pd.read_csv('D:\TDXdata\lday_qfq\\'+filename)df['date']=df['date'].apply(str)df['code']=df['code'].apply(str)#client.execute('DROP TABLE IF EXISTS test')client.execute('CREATE TABLE IF NOT EXISTS meiri ( `date` Date, `code` String, `open` Float64,`high` Float64,`low` Float64,`close` Float64,`vol` Int32, `amount` Int32) ENGINE = ReplacingMergeTree ORDER BY (date,code)')client.insert_dataframe('INSERT INTO meiri VALUES', df)
这里是每日的上传代码,上传后结果如下图所示