高效实现数据同步——并发推送数据库设计 (并发推送数据库设计)

随着大数据时代的到来,数据同步变得越来越重要。在很多应用场景中,需要将不同数据源的数据同步到同一个数据库中,以便于后续的查询和分析。而一个好的数据库设计可以在很大程度上提高数据同步的效率和准确性。

本文将介绍一种高效实现数据同步的方法——并发推送数据库设计。这种数据库设计在数据同步中具有很大的优势,可以减少数据传输的时间和避免数据的丢失。

一、并发推送概述

并发推送是指在多个终端同时访问同一个数据库时,推送数据的方式。当一个终端将数据写入数据库后,数据库会将这些数据并发地推送给其他终端。这样,其他终端就可以及时地获得最新的数据。

并发推送的实现方式有很多种,比如轮询、长连接等。在本文中,我们将介绍一种基于长连接的实现方式,即使用WebSocket技术来实现并发推送。

二、数据库设计

为了实现并发推送,需要对数据库进行一定的设计。具体来说,需要在数据库中增加以下表:

1. DataLog表

DataLog表用于记录数据的变化。每当一条数据发生变化时,就会在DataLog表中插入一条新记录。每条记录包含以下字段:

– ID:记录ID

– TableName:表名

– Operation:操作类型(插入/更新/删除)

– Data:数据内容

– Timestamp:插入时间

2. DataVersion表

DataVersion表用于记录当前数据版本。每当DataLog表中插入一条新记录时,就会更新DataVersion表的相应字段。具体包含以下字段:

– TableName:表名

– Version:当前表的数据版本

3. Subscriber表

Subscriber表用于记录订阅者信息。每个订阅者都有一条记录,具体包含以下字段:

– ID:订阅者ID

– Name:订阅者名称

– Token:订阅者Token

– LastReceivedVersion:订阅者上次收到的数据版本号

– LastReceivedTime:订阅者上次收到数据的时间戳

4. Subscription表

Subscription表用于记录订阅关系。每个订阅关系都有一条记录,具体包含以下字段:

– ID:订阅关系ID

– SubscriberID:订阅者ID

– TableName:表名

5. PushStatus表

PushStatus表用于记录推送消息的状态。每当一条消息被成功推送给一个订阅者时,就会在PushStatus表中插入一条新记录。具体包含以下字段:

– ID:推送消息ID

– SubscriberID:订阅者ID

– TableName:表名

– Message:消息内容

– Status:推送状态

– PushTime:推送时间

6. MessageQueue表

MessageQueue表用于记录待推送的消息。每当DataLog表中插入一条新记录时,就会在MessageQueue表中插入一条新记录。具体包含以下字段:

– ID:消息ID

– TableName:表名

– DataID:数据ID

– Operation:操作类型

– Version:数据版本号

7. WsSession表

WsSession表用于管理WebSocket连接。每个WebSocket连接都对应一条WsSession记录,具体包含以下字段:

– ID:Session ID

– SubscriberID:订阅者ID

– Token:订阅者Token

– LastPingTime:上次心跳时间

8. GlobalConfig表

GlobalConfig表用于记录全局配置参数,例如WebSocket地址等。

以上表格的设计可以极大地减少数据传输的时间和避免数据的丢失。同时,这种设计的表结构也比较简单,可以很方便地使用ORM框架进行操作。

三、实现细节

在实现并发推送时,还需要注意以下几个细节:

1. 数据库更新时的事务处理

由于多个终端会同时访问数据库,因此在更新数据库时需要进行事务处理,以保证数据的一致性。

具体来说,需要将DataLog表和DataVersion表的更新操作放在同一个事务中进行。当DataLog表中插入新记录时,需要在DataVersion表中更新相应的版本号。这样,在推送新数据时,就可以根据DataVersion表中的版本号来判断数据是否已经更新。

2. 心跳包的处理

WebSocket连接需要定时发送心跳包,以保持连接的有效性。在接收到心跳包时,需要及时更新WsSession表中的LastPingTime字段,防止连接超时。

3. 消息的推送

每当一条数据发生变化时,需要将相应的消息推送给所有订阅者。由于WebSocket连接的特性,需要使用异步方式来推送消息。具体来说,可以使用队列方式,将待推送的消息存入MessageQueue表中。使用独立的线程来处理队列中的消息,使用WebSocket协议将消息推送给相应的订阅者即可。

四、

本文介绍了一种高效实现数据同步的方法——并发推送数据库设计。通过对数据库进行一定的设计,可以极大地减少数据传输的时间和避免数据的丢失。同时,在实现过程中还需要遵循一些细节,比如事务处理、心跳包的处理以及消息的推送等。

在实际应用中,我们可以灵活地根据具体情况来调整数据结构和实现细节,以达到更好的效果。

相关问题拓展阅读:

如何设计好mysql数据库?

不能肆核山单纯的说好,或者不好,这需要根据你的系统实际需要。

如果你的系统并发要求,用户量不高,这样的设裂中计就显得没有必要,因为小,少,运行速度也是很快的。

如果你的应用用户多,并发高,数据量大你这样设计是可以的,虽然增加了数据量,磁盘开销,但是换来氏伏的是高效运行。是OK的。

如何搭建大数据云平台具备要素高并发

所谓的大数据平台不是独立存在的,凯弊比如百度是依赖搜索引擎获得大数据并开展业务的,阿里是通过电子商务交易获得大数据并开展业务的,腾讯是通过社交获得大数据并开始业务的,所以说大数据平台不是独立存在的,重点是如何搜集和沉淀数据,如何分析数据并挖掘数据的价值。

  我可能还不够资格回答这个问题,没有经历过一个公司大数据平台从无到有到复杂的过程。不过说说看法吧,也算是梳理一下想法找找喷。

  这是个需求驱动的过程。

曾经听过spotify的分享,印象很深的是,他们分享说,他们的hadoop集群之一次故障是因为,机器放在靠窗的地方,太阳晒了当机了(笑)。从简单的没有机房放在自家窗前的集群到一直到现在复杂的数据平台,这是一个不断演进的过程。

对小公司来说,大概自己找一两台机器架个集群算算,也算是大数据平台了。在初创阶段,数据量会很小,不需要多大的规模。这时候组件选择也很随意,Hadoop一套,任务调度用脚本或者轻量的框架比如luigi之类的,数据分析可能hive还不如导入RMDB快。监控和部署也许都没盯祥族时间整理,用脚本或者轻量的监控,大约是没有ganglia、nagios,puppet什么的。这个阶段也许算是技术积累,用传统手段还是真大数据平台都是两可的事情,但是为了今后的扩展性,这时候上Hadoop也许是不错的选择。

当进入高速发展期,也许扩容会跟不上计划,不少公司可能会迁移平台到云上,比如AWS阿里云什么的。小规模高速发展的平台,这种方式应该是经济实惠的,省了运维和管理的成本,扩容比较省心。要解决的是选择平台本身提供的服务,计算成本,打通数据出入的通道。整个数据平台本身如果走这条路,可能就已经基本成型了。走这条路的比较有名的应该是netflix。

也有一个阶段,你发现云服务的费用太高,虽然省了你很多事,但是花钱嗖嗖的。几个老板一合计,再玩下去下个月工资发布出来了。然后无奈之下公司开始往私有集群迁移。这时候你大概需要一群靠谱的运维,帮你监管机器,之前两三台机器登录上去看看状态换个磁盘什么的也许就不可能了,你面对的是成百上千台主机,有些关键服务必须保证稳定,有些是数据节点,磁盘三天两头损耗,网络可能被压得不堪重负。你需要一个靠谱的人设计网络布局,设计运维规范,架设监控,值班团队走起7*24小时随时准备出台。然后上面再有平台组真的大数据平台走起。

然后是选型,如果有技术实力,可以直接用社区的一整套,自己管起来,监控部署什么的自己走起。这个阶段部署监控和用户管理什么的都不可能像两三个节点那样人肉搞了,配置管理,部署管理都需要专门的平台和组件;定期Review用户的作业和使用情况,决定是否扩容,清理数据等等。否则等机器和业务进一步增加,团队可能会死的很惨,疲于奔命,每天事故不断,进入恶性循环。

当然有金钱实力的大户可以找Cloudera,Hortonworks,国内可以找华为星环,会省不少事,适合非互联网土豪。当然互联网公司也有用这些东西的,比如Ebay。

接下去你可能需要一些重量的组件帮你做一些事情。

比如你的宴宏数据接入,之前可能找个定时脚本或者爬log发包找个服务器接收写入HDFS,现在可能不行了,这些大概没有高性能,没有异常保障,你需要更强壮的解决方案,比如Flume之类的。

你的业务不断壮大,老板需要看的报表越来越多,需要训练的数据也需要清洗,你就需要任务调度,比如oozie或者azkaban之类的,这些系统帮你管理关键任务的调度和监控。

数据分析人员的数据大概可能渐渐从RDBMS搬迁到集群了,因为传统数据库已经完全hold不住了,但他们不会写代码,所以你上马了Hive。然后很多用户用了Hive觉得太慢,你就又上马交互分析系统,比如Presto,Impala或者SparkSQL。

你的数据科学家需要写ML代码,他们跟你说你需要Mahout或者Spark MLLib,于是你也部署了这些。

至此可能数据平台已经是工程师的日常工作场所了,大多数业务都会迁移过来。这时候你可能面临很多不同的问题。

比如各个业务线数据各种数据表多的一塌糊涂,不管是你还是写数据的人大概都不知道数据从哪儿来,接下去到哪儿去。你就自己搞了一套元数据管理的系统。

你分析性能,发现你们的数据都是上百Column,各种复杂的Query,裸存的Text格式即便压缩了也还是慢的要死,于是你主推用户都使用列存,Parquet,ORC之类的。

又或者你发现你们的ETL很长,中间生成好多临时数据,于是你下狠心把pipeline改写成Spark了。

再接下来也许你会想到花时间去维护一个门户,把这些零散的组件都整合到一起,提供统一的用户体验,比如一键就能把数据从数据库chua一下拉到HDFS导入Hive,也能一键就chua一下再搞回去;点几下就能设定一个定时任务,每天跑了给老板自动推送报表;或者点一下就能起一个Storm的topology;或者界面上写几个Query就能查询Hbase的数据。这时候你的数据平台算是成型了。

当然,磕磕碰碰免不了。每天你都有新的问题和挑战,否则你就要失业了不是?

你发现社区不断在解决你遇到过的问题,于是你们架构师每天分出很多时间去看社区的进展,有了什么新工具,有什么公司发布了什么项目解决了什么问题,兴许你就能用上。

上了这些乱七八糟的东西,你以为就安生了?Hadoop平台的一个大特点就是坑多。尤其是新做的功能新起的项目。对于平台组的人,老板如果知道这是天然坑多的平台,那他也许会很高兴,因为跟进社区,帮忙修bug,一起互动其实是很提升公司影响力的实情。当然如果老板不理解,你就自求多福吧,招几个老司机,出了问题能马上带路才是正道。当然团队的技术积累不能不跟上,因为数据平台还是乱世,三天不跟进你就不知道世界是什么样了。任何一个新技术,都是坑啊坑啊修啊修啊才完善的。如果是关键业务换技术,那需要小心再小心,技术主管也要有足够的积累,能够驾驭,知道收益和风险。

你好,您应该是景区或者文旅部门机构,这个问题深入展开不是一句两句能讲清楚地哈,简单说一下目前现状:目前全国范围内搭建的规范还没有,各地从金额来说几千万到几十万的方式都有,金额特别大的项目大概率是基建和装修及硬件采买。如果是一个基础设施完善的机构,基本是信息集成,包括票务、摄像、投诉、客流、停车场管理、广播通信(一般在应急平台上)、口差洞碑等;如果基础设施落后,个人建议也没有必要花太多钱去搞基建,你建设的目的是为了应用,直接找相应的数据服务公司就好了,自己又不用培养数据方面的人才,直接使用数据服务很方便,每年付费也比一下投入大量资金用于基建只有一个空壳子要好,现在国内科技公司越来下沉行业,大量的案例应用服务基本满足大部分客户需求了,没必要自己照搬一套在自己本地。据我了解百度腾讯阿里都有文旅服务的部门,也有专注拆桥做虚御枯文旅数据市场服务的,好像叫海鳗,他们海字辈的企业一堆,都针对不同行业。我作为文旅管委会的从业者,还是建议直接买服务,我们自己景区建的中心都没有数据,领导也走了,晾在那每人管了,太浪费了。

关于并发推送数据库设计的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 高效实现数据同步——并发推送数据库设计 (并发推送数据库设计)