实时数据,其实就是把数据的时效性特点给突现出来
实时数据,因为实时数据其独特的优势,会让人觉得实时数据背后具有极大的价值可以挖掘。
实时数据文件模型:
a端会不停的生成数据,而生成的数据会写入到一个指定的文件中去。
b端会不停的去读取a端生成的数据
实时数据中最质朴的一个难点就是数据读取,这是一个i/o操作比较频繁的业务场景,而且我们在读数据的时候,由于想要获取这个文件中的所有信息,所以我们一般会读一个静态的文件,但是由于这个文件不停的在更新,所以我们就要每隔一段时间去获取这个文件中的数据,但是由于i/o操作频繁,对硬件等资源会带来较大的压力,所以对于我们来说,更好的解决方案就是直接取增量数据,每次都从上一次的结尾去取数据,这样每次就都可以取到增量数据了。在文件对象处理中,这个方法称为漂移。
在这里,我们是读取文件的,在使用blink的时候,我们是读取数据库的,对于数据库而言,其实我们想要实时读取,其实就是如何去取增量数据了,而且这个增量是我们所间隔的时间。在这里,实时数据其实对于我们而言,其实也是有延迟的,只是这个延迟比较短而已。在blink中,实时数据的读取主要是根据dt字段,即对数据添加了时间字段做标识。所以在读取数据的时候,也是以时间做为漂移的标识符。
a端文件生成代码
import datetime
import time
def create_data():
file = open('./result.txt','a+',encoding='utf-8')
file.write(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + '\n')
# print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
if __name__ == '__main__':
while True:
create_data()
time.sleep(1)
b端文件读取代码
import time
def get_data():
position = 0
file = open('./result.txt','r',encoding='utf-8')
while True:
file.seek(position)
data = file.read()
print(data)
print('='*100)
position = file.tell()
time.sleep(1)
if __name__ == '__main__':
get_data()
上述代码放在两个文件中,然后启动即可,对于实时数据,理解起来其实并不复杂,复杂的是有一群人创造了一些新的名词去描述他,导致我们对于实时数据的理解都花费在了了解这些新名词的身上。对于实时数据,我们其实只要记住一点,最简易的模型更适合我们去理解,在自己的理解上再添加别人的见解,了解起新的事物来会更快。
先这样,后边可以找时间模拟一下实时数据场景,做一个完整的模拟,看一下过程中会遇到那些问题。以及原来接入过程中,datahub使用的必要性。