10.数据库存储(LEVELI&II)的难点:分发时节省你的带宽

请关注个人小站http://sqlhis.com/

前面说过,高频数据最好分发的客户端的数据库中,这样可以避免很多性能和安全风险。这里我们讨论一下分发的一些难点:
在这里插入图片描述
首先明确一点,客户端的高频的数据库是服务器端高频数据库的一个子集。也就是说,你不是把服务器的高频数据库整个复制到客户端。正常来说,客户端应该在维度下载数据:

  1. 基于时间

  2. 基于市场或者基于证券ID

当然实际情况会复杂一些,不同市场的数据所属的表会不一样,但是总的理念是一致的:按需下载


内网随便就是1000M以上的带宽,但是互联网的带宽要小的多,所以在数据分发时,很重要的一点就是节省带宽,节省带宽可以从以下几点考虑:

  • 按需下载
    只选择自己需要的数据,当然可以节省大量的带宽了。

  • 数据压缩
    数据压缩采用简单的zip压缩已能节省很多带宽了,这个没有太大的难度。不过要注意如何确定每个数据包的大小,笔者建议数据包为“ID+日期+类型“,即一个证券某一天某个类型的记录。

  • 避免重复下载
    其实就是一个数据的比对功能,以证券+日期为维度进行数据对比,如果客户端和服务端的数据一致的话,就无需再次下载。可以考虑在客户端和服务端都建立如下的表:

ID 日期 类型 MD5
000001.SZ 20200214 行情 XXXXXXXXX
000002.SZ 20200214 行情 XXXXXXXXX

在行情写入程序中,完成某日数据写入的时候,写入上表。

客户端进行数据更新的时候,对比自己的记录和服务器的记录,如果MD5不一致或者本地没有记录,即代表本地记录需要更新。这将极大的简化客户端的更新操作。


例1:客户端之前下载了2020017到20200120的深圳市场的数据,现在需要重新下载20200117到20200121全市场的数据,不用担心,比对MD5,自动略过这些已下载的数据。


例2:之前以下载了20190101到20191231的全部数据,现在服务端数据有少许修正,需要重新下载。则依然选择一年时间段+全市场,对比MD5后只会同步差异数据。


例3:如果用户操作客户端,删除了实际的数据,需要重新同步。

这里稍微有点复杂,实际上默认用户不会更改已下载的数据,此时还是用MD5比对,但是MD5不是直接存储在客户端表里面的MD5,而是需要读取数据库表,生成MD5后和服务器比对。 基于以上的方法,可以大大的节省带宽,假设带宽是10M BIT,则大概是1M字节,一个小时也能下载3600M数据,只要客户端处理能力足够,可以完成全天的高频数据下载。