CN110096552A - 一种业务数据的读、写方法、装置、设备和存储介质 - Google Patents
一种业务数据的读、写方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN110096552A CN110096552A CN201910374553.6A CN201910374553A CN110096552A CN 110096552 A CN110096552 A CN 110096552A CN 201910374553 A CN201910374553 A CN 201910374553A CN 110096552 A CN110096552 A CN 110096552A
- Authority
- CN
- China
- Prior art keywords
- database
- business datum
- thread
- write
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种业务数据的读、写方法、装置、设备和存储介质。该方法包括:接收数据操作;确定数据操作的操作类型;若操作类型为写操作,则执行第一写操作;若第一写操作执行成功,则执行第二写操作,第二写操作用于将业务数据写入所有从数据库,以使主数据库与所有从数据库同步业务数据。该方法通过区分主数据库与从数据库,区分业务数据写入的顺序,只有当将业务数据写入主数据库成功后才会将该业务数据写入从数据库,不管该业务数据是否成功写入从数据库,都有完整、正确的业务数据存在于主数据库中,当从数据库执行写操作失败后,可以从主数据获取正确的业务数据进行从数据库的写入,从而保证业务数据在各个数据库中的一致性。
Description
技术领域
本发明实施例涉及数据存储技术,尤其涉及一种业务数据的读、写方法、装置、设备和存储介质。
背景技术
目前,随着互联网的普及与发展,有越来越多的数据需要被处理,同时对处理的要求也越来越高。对于一些网站运营商而言,每天可能需要面对极大的业务数据,随着业务数据量的增大,对数据的稳定存储、快速读取的要求也越来越高。
通常业务数据会存储在一个数据库中,此时,如果该数据库出现了故障,那么这个数据库中的业务数据都无法使用。为了解决这一问题,一般会设置多个数据库之间进行业务数据的同步。
但是,如果一个业务数据同时被写入多个数据库,可能因为写入不稳定等因素,导致一个业务数据在不同的数据库中表现为不同的业务数据,即无法保证每个数据库中业务数据的一致性。当用户需要读取该业务数据时,会根据数据数据库的不同而产生不同的返回结果,从而导致系统维护的难度加大。
发明内容
本发明提供一种业务数据的读、写方法、装置、设备和存储介质,以解决一个业务数据同时被写入多个数据库,无法保证一致性的问题。
第一方面,本发明实施例提供了一种业务数据的写方法,在一分布式的数据集群中包含主数据库、从数据库与一代理,所述方法应用于所述代理中,包括:
接收数据操作;
确定所述数据操作的操作类型;
若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;
若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。
在此基础上,所述代理记录有所述主数据库的第一地址,所述代理创建有线程池,所述线程池中具有线程;
所述执行第一写操作,包括:
为所述主数据库分配线程,作为第一线程;
确定所述主数据库的第一地址;
调用所述第一线程访问所述第一地址,以向所述主数据库写入所述业务数据;
释放所述第一线程。
在此基础上,所述从数据库的数量为至少两个,所述代理记录有所述从数据库的第二地址;
所述执行第二写操作,包括:
确定第一目标数据库,所述第一目标数据库为未执行写子操作的从数据库;
对所述第一目标数据库执行写子操作,所述写子操作用于写入所述业务数据;
判断将所述业务数据是否成功写入所述第一目标数据库;
若是,则确认所述主数据库与所述第一目标数据库成功同步所述业务数据,返回执行所述确定第一目标数据库。
在此基础上,所述执行第二写操作,还包括:
确定第二目标数据库,所述第二目标数据库为执行所述写子操作失败的从数据库;
对所述第二目标数据库执行所述写子操作;
判断将所述业务数据是否成功写入所述第二目标数据库;
若是,则确认所述主数据库与所述第二目标数据库成功同步所述业务数据,返回执行所述确定第二目标数据库。
在此基础上,所述代理记录有所述从数据库的第二地址,所述代理创建有线程池,所述线程池中具有线程;
所述对所述第一目标数据库执行写子操作,包括:
为所述第一目标数据库分配线程,作为第二线程;
确定所述第一目标数据库的第二地址;
调用所述第二线程访问所述第二地址,以向所述第一目标数据库写所述业务数据;
释放所述第二线程;
所述对所述第二目标数据库执行写子操作,包括:
为所述第二目标数据库分配线程,作为第三线程;
确定所述第二目标数据库的第二地址;
调用所述第三线程访问所述第二地址,以向所述第一目标数据库写所述业务数据;
释放所述第三线程。
在此基础上,包括:
统计对同一个所述从数据库执行所述写子操作失败的次数;
当所述次数超过预设的阈值时,对所述从数据库生成报错信息。
第二方面,本发明实施例还提供了一种业务数据的读方法,在一分布式的数据集群中包含主数据库、从数据库与一代理,所述方法应用于所述代理中,包括:
接收数据操作;
确定所述数据操作的操作类型;
若所述操作类型为读操作,则从所述从数据库中选择目标数据库;
对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。
在此基础上,所述代理记录有所述从数据库的地址,所述代理创建有线程池,所述线程池中具有线程;
所述对所述目标数据库执行读操作,包括:
为所述目标数据库分配线程;
确定所述目标数据库的地址;
调用所述线程访问所述地址,以从所述目标数据库读取所述数据操作所作用的业务数据;
释放所述线程。
第三方面,本发明实施例还提供了一种业务数据的写装置,包括:
第一数据接收模块,用于接收数据操作;
第一数据类型确定模块,用于确定所述数据操作的操作类型;
第一写操作执行模块,用于若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;
第二写操作执行模块,用于若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。
第四方面,本发明实施例还提供了一种业务数据的读装置,包括:
第二数据接收模块,用于接收数据操作;
第二数据类型确定模块,用于确定所述数据操作的操作类型;
目标数据库确定模块,用于若所述操作类型为读操作,则从所述从数据库中选择目标数据库;
读操作执行模块,用于对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。
第五方面,本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的一种业务数据的写方法;
或者,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第二方面所述的一种业务数据的读方法。
第六方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的一种业务数据的写方法;
或者,
该程序被处理器执行时实现如第二方面所述的一种业务数据的读方法。
本发明接收数据操作;确定所述数据操作的操作类型;若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。通过区分主数据库与从数据库,区分业务数据写入的顺序,只有当将业务数据写入主数据库成功后才会将该业务数据写入从数据库,不管该业务数据是否成功写入从数据库,都有完整、正确的业务数据存在于主数据库中,当从数据库执行写操作失败后,可以从主数据获取正确的业务数据进行从数据库的写入,从而保证业务数据在各个数据库中的一致性。
附图说明
图1为本发明实施例一提供的一种业务数据的写方法的流程图;
图2A为本发明实施例二提供的一种业务数据的写方法的流程图;
图2B为本发明实施例二提供的一种执行重新写入从库操作的流程图;
图3为本发明实施例三提供的一种业务数据的读方法的流程图;
图4为本发明实施例四提供的一种业务数据的读方法的流程图;
图5为本发明实施例五提供的一种业务数据的写装置的结构图;
图6为本发明实施例六提供的一种业务数据的读装置的结构图;
图7为本发明实施例七提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种业务数据的写方法的流程图。本实施例可适用于通过代理将业务数据先写入主数据库,写入成功后再写入从数据库的场景。该场景中,一分布式的数据集群中包含主数据库、从数据库与一代理。其中,该分布式的数据集群为Redis集群。该方法应用于该代理中,该代理独立于主库、从库,以JAVA为例,可以构建内存化数据库多写代理组件(MultiWriteJedisProxy)作为代理也可以由一种业务数据的写装置来执行,该装置可以由软件和/或硬件的方式实现,通常配置于电子设备中,典型的是设置在分布式的数据集群对应的硬件设备中。
Redis是一个键值对存储系统。它支持存储的值的类型相对更多,包括字符串(string)、链表(list)、集合(set)、有序集合和哈希类型(hash)。这些数据类型都支持增加/删除(push/pop)、添加/移动(add/remove)及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了主从(master-slave)同步。
Mysql是关系型数据库,是持久化存储的,查询检索的话,会涉及到磁盘IO操作,为了提高性能,可以使用缓存技术,如memcached这一内存数据库,数据存储在内存中(当然也可以进行持久化存储),可以用作缓存数据库。用户首先去memcached查询数据,如果未查询到(即缓存未命中),才去Mysql中查询数据,查询到的数据会更新到缓存数据库中,提供给下次可能进行的查询。提高了数据查询方面的性能。Redis和memcached都是缓存数据库,可以大大提升高数据量的web访问速度。但是memcached只是提供了简单的数据结构string,而Redis的value可以是string、list、set、hashset、sorted set这些,功能更加强大。通常的,Mysql与Redis的存储结构与语法指令均不相同,功能不能互通。
参考图1,该方法具体包括:
S101、接收数据操作。
在分布式的数据集群中,某些应用根据业务需求,触发数据操作,对数据库中的业务数据进行操作。
其中,数据操作一般包括操作类型。
其中,操作类型可用于表示该数据操作将某一业务数据写入数据库(即写操作),或者,从数据库中将读取业务数据(即读操作)。
例如,写入数据库的业务数据可以是:某运营人员A运营一个网站,该网站每时每刻都有可能有X个不同用户,从不同地域访问。运营人员想知道每分钟每个省访问该网站的用户数,以搭配相应的运营策略。用户每次与网站交互,都产生这样格式的记录:时间,用户ID,省份。如:2018-11-17 16:05:10,user1,guangdong。
在本实施例中,通过代理接收数据操作,对应用代码无感知,接收正常的读/写指令即可。
S102、确定所述数据操作的操作类型。
不同的操作类型,代理需要进行不同的操作,因此在代理进行操作前,确定所述数据操作的操作类型。
在数据操作的某些字节段,包括表示该数据操作的操作类型的字符。通常的,可以使用00表示操作类型为写操作。当然,也可以根据本领域技术人员的常用手段对表示写操作的操作类型的字符进行设置。
在一可行的实现方式中,代理通过对表示该数据操作的操作类型的字符进行识别,确定该数据操作的操作类型。通过代理判断数据操作的类型取代了传统的数据库判断数据操作的类型,减少了对类型判断的次数,减轻了数据库的计算压力。
S103、若所述操作类型为写操作,则执行第一写操作。
对于写操作而言,将业务数据写入数据库中,该数据库包括主数据库与从数据库,主数据库与从数据库之间同步该业务数据。
在本实施例中,分两步将该业务数据写入数据库中。
第一步,执行第一写操作,该第一写操作可用于将数据操作所作用的业务数据写入主数据库的操作。
在具体实现中,代理中配置有该数据集群中主数据库的互联网协议地址(Internet Protocol Address,IP地址)、端口和从数据库的IP地址、端口等用于连接主数据库、从数据库的信息。当代理将一业务数据写入一主数据库时,可以通过配置中存储的IP地址、端口等信息找到该主数据库。
其中,主数据库一般是固定的,当主数据库的IP地址有变化时,需要将新的主数据库的IP地址发送给该代理,以使该代理更新存放数据库IP地址的列表。
S104、若所述第一写操作执行成功,则执行第二写操作。
只有当将业务数据写入主数据库成功后才会将该业务数据写入从数据库,不管该业务数据是否成功写入从数据库,都有完整、正确的业务数据存在于主数据库中,当从数据库执行写操作失败后,可以从主数据获取正确的业务数据进行从数据库的写入,从而保证业务数据在各个数据库中的一致性。
第二步,执行第二写操作,该第二写操作用于将业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步该业务数据。
在一可行的实现方式中,可以理解为,当代理成功将业务数据写入主数据库后,将该业务数据逐个写入从数据库。
其中,将该业务数据逐个写入从数据库,可以采用如下方式:
第一、将所有从数据库进行排序,构成数据库队列,当该业务数据写入一个从数据库后,将被写入的从数据库从该数据库队列中删除。
第二、对每一个从数据库构建一个线程,将该线程的执行方式设置为单线程执行,以保证一次只将业务数据写入一个从数据库。
本发明实施例接收数据操作;确定数据操作的操作类型;若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。通过区分主数据库与从数据库,区分业务数据写入的顺序,只有当将业务数据写入主数据库成功后才会将该业务数据写入从数据库,不管该业务数据是否成功写入从数据库,都有完整、正确的业务数据存在于主数据库中,当从数据库执行写操作失败后,可以从主数据获取正确的业务数据进行从数据库的写入,从而保证业务数据在各个数据库中的一致性。
实施例二
图2A为本发明实施例二提供的一种业务数据的写方法的流程图。本实施例是在实施例一的基础上进行的细化,具体描述了执行第一写入操作和执行的二写入操作的具体过程。参考图2A,该方法具体包括:
S201、接收数据操作。
S202、确定所述数据操作的操作类型。
S203、确定所述操作类型为写操作。
在一可行的实现方式中,代理通过对表示该数据操作的操作类型的字符进行识别,确定该数据操作的操作类型。
代理是独立于Redis,单独构造的功能体。这与早期的基于Mysql使用的代理有根本的不同。Mysql中使用的代理存在数据库代理层中,用于关联应用服务器层与数据库(主数据库与从数据库),但是代理层是存在于Mysql的本身构造中,并不独立。如果Mysql出现故障,则代理无法使用。
S204、为所述主数据库分配线程,作为第一线程。
一般的,代理记录有主数据库的IP地址。为了区别主数据库地址与从数据库地址的区别,将主数据库的IP地址命名为第一地址,从数据库的IP地址命名为第二地址。
一般的,代理还包括线程池,线程池中包括预设数量的线程。针对业务数据而言,代理首先会把他写入主数据库,然后写入从数据库,写入的过程是通过线程实现的。为了区别写入主数据库的线程与写入从数据库的线程,将写入主数据库的线程命名为第一线程,将写入从数据库的线程命名为第二线程。
其中,线程可采用Jedis来实现,Jedis客户端是一个面向java客户端,库文件实现了对Redis各类API(Application Programming Interface,应用程序编程接口)进行封装调用。Redis通信协议是Redis客户端与Redis服务器之间交流的语言,它规定了请求和返回值的格式。Redis客户后端与服务器使用一种专门为Redis设计的协议Redis序列化协议(Redis Serialization Protocol)交互,Redis上下文使用TCP(Transmission ControlProtocol传输控制协议)连接。
线程池可以实现在客户端建立多个链接并且不释放,当需要使用连接的时候通过一定的算法获取已经建立的连接,使用完了以后则还给连接池,这就免去了数据库连接所占用的时间。因此,通常会使用连接池的方式对jedis连接进行管理,所有jedis对象会预先放在池子中(jedisPool),每次要连接Redis,只需要在池子中借,用完了再归还给池子。
在一可行的实现方式中,代理为主数据库分配第一线程。
其中,可以在代理为主数据库分配第一线程时创建线程,当使用结束后再销毁线程。也可以直接从线程池中“借用”一段线程,使用完毕后“归还”该线程。采用“创建-销毁”的方式管理线程可以在线程数量少时节约开销,采用“借用-归还”的方式管理线程可以在线程数量多的时候减少“创建-销毁”线程的时间。
S205、确定所述主数据库的第一地址。
代理中配置有该数据集群中主数据库的第一地址和从数据库的第二地址。可以通过查询的方式从配置中获取主数据库的第一地址。
S206、调用所述第一线程访问所述第一地址,以向所述主数据库写入所述业务数据。
调用第一线程与该第一地址建立连接,将业务数据写入主数据库中。
建立连接包括如下步骤:首先,创建Jedis对象即创建连接Redis服务器的客户端,在Jedis基类中主要有连接对象,创建Jedis对象的时候尚未连接到Redis服务器,在连接类中,主要设置了链接Redis所使用套接字(socket)的参数以及操作socket所使用的工具。其次,把由字符串转换成字节数值,并调用方法来发送Redis命令。
S207、释放所述第一线程。
将业务数据写入主数据库后,释放该第一线程。释放的方式可以是“归还”或者“销毁”。
当然,如果第一写入操作失败,代理会向业务端报错。以提示业务端该业务数据存储失败。在第一写入操作失败的情况下不会执行第二写入操作,也就是不会将改业务数据存入从数据库中。
S208、确定所述第一写操作执行成功。
代理根据第一线程的执行状况判定确定第一写入操作成功。
S209、确定第一目标数据库。
一般的,代理记录有从数据库的IP地址。为了区别主数据库地址与从数据库地址的区别,将从数据库的IP地址命名为第二地址。同时,在一数据集群中包含从数据库的数量为至少两个。
代理从未执行写子操作的从数据库中确定一个从数据库写入该业务数据,为了便于区分,将此时的从数据库命名为第一目标数据库。
其中,写子操作是将业务数据写入从数据库的操作。一个从数据库执行写子操作可能会有两种结果,即写入成功与写入失败,但无论是写入成功与写入失败,该从数据库均已经被执行写子操作。
S210、对所述第一目标数据库执行写子操作。
在一可行的实现方式中,代理从配置中确定第一目标数据库的第二地址。为第一目标数据库分配线程,作为第二线程。调用第二线程访问第二地址,以向第一目标数据库写业务数据;将业务数据写入第一目标数据库后,释放该第二线程。释放的方式与第一线程相同。
S211、判断将所述业务数据是否成功写入所述第一目标数据库。若是,则执行步骤S213;若否,则执行步骤S212。
代理根据第二线程的执行状况判定确定第二写入操作是否成功,即业务数据是否成功写入第一目标数据库。若是,则确认所述主数据库与所述第一目标数据库成功同步业务数据;若否,则执行重新写入从库操作。
S212、执行重新写入从库操作。
代理根据第二线程的执行状况判定业务数据写入第一目标数据库失败后,执行将该业务数据重新写入从数据库的操作。当然,重新写入从数据库操作可以是在写入失败后立刻重写,也可以是间隔一段时间再进行重写。
在一可行的实现方式中,构建失败队列列表,该列表包括:失败时间,业务数据,写入失败的第二地址。对失败时间进行轮循,当所述失败时间距离当前时间的时间间隔符合预设条件时,尝试重新将业务数据写入从数据库。若再次写入失败则更新该失败时间。
失败队列列表可以存储在代理中,也可以存储在主数据库中。
S213、确认所述主数据库与所述第一目标数据库成功同步所述业务数据。返回执行步骤S209。
代理根据第二线程的执行状况判定业务数据成功写入第一目标数据库后,代理重新从未执行写子操作的从数据库中确定一个从数据库,作为第一目标数据库。
在上述实施例的基础上,图2B为本发明实施例二提供的一种执行重新写入从库操作的流程图,参考图2B,该方法包括:
S2121、确定第二目标数据库。
第二目标数据库为执行写子操作失败的从数据库。
在一可行的实现方式中,如果采用构建失败队列列表的方式管理写入从数据库失败的业务数据,可以通过从列表中读取写入失败的第二地址。
S2122、对所述第二目标数据库执行所述写子操作。
在一可行的实现方式中,代理从配置中确定第二目标数据库的第二地址。为第二目标数据库分配线程,作为第三线程。调用第三线程访问第二地址,以向第二目标数据库写业务数据;将业务数据写入第二目标数据库后,释放该第三线程。释放的方式与第一线程、第二线程相同。
S2123、判断将所述业务数据是否成功写入所述第二目标数据库。若是,则执行步骤S2124;若否,则执行步骤S2125。
代理根据第三线程的执行状况判定确定业务数据是否成功写入第二目标数据库。若是,则确认所述主数据库与所述第二目标数据库成功同步所述业务数据;若否,则确认第二目标数据库执行写子操作失败。
S2124、确认所述主数据库与所述第二目标数据库成功同步所述业务数据。返回执行步骤S2121。
代理根据第三线程的执行状况判定确定业务数据成功写入第二目标数据库后,代理重新从执行写子操作失败的从数据库中确定一个从数据库,作为第二目标数据库。
S2125、确认所述第二目标数据库执行所述写子操作失败。
执行写子操作失败的第二目标数据库仍会成为步骤S2121中第二目标数据库的候选对象。
在上述实施例的基础上,还可以统计对同一个从数据库执行写子操作失败的次数,当次数超过预设的阈值时,对从数据库生成报错信息。将该报错信息发送到业务端进行显示。这样的报错方式可以及时提醒业务端人员对从数据库进行检查,以便及时保证数据集群中数据库之间的信息通常和一致。
实施例三
图3为本发明实施例三提供的一种业务数据的读方法的流程图。本实施例可适用于通过代理读取从数据库中业务数据的场景。该方法应用于该代理中,也可以由一种业务数据的读装置来执行,该装置可以由软件和/或硬件的方式实现,通常配置于电子设备中,典型的是设置在数据集群对应的硬件设备中。参考图3,该方法具体包括:
S301、接收数据操作。
数据操作是用户的某些操作行为而引发的操作。数据操作一般包括操作类型和业务数据。
其中,操作类型可用于需要从数据库中将读取业务数据需要的内容。
需要说明的是,需要从数据库中将读取业务数据需要的内容可以是一些需要快速读取的、存储在数据库的数据。如:说将用户的登录态存储在会话控制(session)中,当需要判断用户权限的时候,就可以直接读取数据库中的用户会话控制数据,从而进行快速判断。
在一可行的实现方式中,通过代理接收数据操作。代理接收该数据操作后,对应用代码无感知,接收正常的读/写指令即可。
S302、确定所述数据操作的操作类型。
在数据操作的某些字节段,包括表示该数据操作的操作类型的字符。通常的,可以使用11表示操作类型为读操作。当然,也可以根据本领域技术人员的常用手段对表示读操作的操作类型的字符进行设置。
在一可行的实现方式中,代理通过对表示该数据操作的操作类型的字符进行识别,确定该数据操作的操作类型。
S303、若所述操作类型为读操作,则从所述从数据库中选择目标数据库。
在一可行的实现方式中,一数据集群中包含主数据库、从数据库与一代理。当代理接收数据操作,并确定该数据操作的操作类型为读操作时,代理确定一从数据库,作为目标数据库。
S304、对所述目标数据库执行读操作。
读操作用于读取数据操作所作用的业务数据。
在一可行的实现方式中,由于主数据库与从数据库均存有相同的业务数据,因此可确定任一从数据库来作为目标数据库并执行读操作。
本发明实施例接收数据操作;确定所述数据操作的操作类型;若所述操作类型为读操作,则从所述从数据库中选择目标数据库;对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。通过确定目标数据库保证了业务数据的就近读取。同时,通过区分主数据库与从数据库,仅仅通过从数据库读取业务数据降低证了主数据库与从数据库的交互关系。
实施例四
图4为本发明实施例四提供的一种业务数据的读方法的流程图。本实施例是在实施例三的基础上进行的细化,具体描述了对目标数据库执行读操作的具体过程。参考图4,该方法具体包括:
S401、接收数据操作。
S402、确定所述数据操作的操作类型。
S403、若所述操作类型为读操作,则从所述从数据库中选择目标数据库。
在一可行的实现方式中,可以对从数据库进行编号,获得从数据库的数据库编号信息,然后根据数据操作的IP地址,进行哈希运算,获得数据操作的数据编号信息,将数据编号信息映射对应到数据库编号信息。与数据编号信息匹配的数据库编号信息对应的从数据库作为目标数据库。
在一可行的实现方式中,可以对从数据库进行编号,获得从数据库的数据库编号信息,将数据库编号信息构建为编号环,根据数据操作的IP地址,进行哈希取余,获得数据操作的数据编号信息,将数据编号信息映射到编号环。将数据编号信息在编号环中、顺时针或者逆时针遇到的第一个数据库编号信息所对应的从数据库作为目标数据库。
S404、为所述目标数据库分配线程。
一般的,代理还包括线程池,线程池中包括预设数量的线程。当确定一个数据操作为读操作,并从数据库中选择目标数据库后,代理为目标数据库分配一段线程。
S405、确定所述目标数据库的地址。
代理中配置有该数据集群中数据库的IP地址,可以通过查询的方式从配置中获取目标数据库的地址。
S406、调用所述线程访问所述地址,以从所述目标数据库读取所述数据操作所作用的业务数据。
调用线程访问目标数据库的地址,从目标数据库读取数据操作所作用的业务数据。
S407、释放所述线程。
从目标数据库读取数据操作所作用的业务数据后,释放该线程。释放的方式与实施例二中释放第一线程、第二线程和第三线程的方式相同。
通过上述方式,可以在读操作的量大的情况下,实现从数据库之间的负载均衡,避免某一个从数据库的负载过大。
实施例五
图5为本发明实施例五提供的一种业务数据的写装置的结构图。包括:第一数据接收模块51、第一数据类型确定模块52、第一写操作执行模块53和第二写操作执行模块54。其中第一数据接收模块51,用于接收数据操作;
第一数据类型确定模块52,用于确定所述数据操作的操作类型;
第一写操作执行模块53,用于若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;
第二写操作执行模块54,用于若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。
本发明实施例接收数据操作;确定所述数据操作的操作类型;若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。通过区分主数据库与从数据库,区分业务数据写入的顺序,只有当将业务数据写入主数据库成功后才会将该业务数据写入从数据库,不管该业务数据是否成功写入从数据库,都有完整、正确的业务数据存在于主数据库中,当从数据库执行写操作失败后,可以从主数据获取正确的业务数据进行从数据库的写入,从而保证业务数据在各个数据库中的一致性。
在上述实施例的基础上,所述代理记录有所述主数据库的第一地址,所述代理创建有线程池,所述线程池中具有线程,所述第一写操作执行模块53还用于:
为所述主数据库分配线程,作为第一线程;
确定所述主数据库的第一地址;
调用所述第一线程访问所述第一地址,以向所述主数据库写入所述业务数据;
释放所述第一线程。
在上述实施例的基础上,所述从数据库的数量为至少两个,所述代理记录有所述从数据库的第二地址,所述第二写操作执行模块54还用于:
确定第一目标数据库,所述第一目标数据库为未执行写子操作的从数据库;
对所述第一目标数据库执行写子操作,所述写子操作用于写入所述业务数据;
判断将所述业务数据是否成功写入所述第一目标数据库;
若是,则确认所述主数据库与所述第一目标数据库成功同步所述业务数据,返回执行所述确定第一目标数据库。
在上述实施例的基础上,所述第二写操作执行模块54还用于:
确定第二目标数据库,所述第二目标数据库为执行所述写子操作失败的从数据库;
对所述第二目标数据库执行所述写子操作;
判断将所述业务数据是否成功写入所述第二目标数据库;
若是,则确认所述主数据库与所述第二目标数据库成功同步所述业务数据,返回执行所述确定第二目标数据库。
在上述实施例的基础上,所述代理记录有所述从数据库的第二地址,所述代理创建有线程池,所述线程池中具有线程;
所述对所述第一目标数据库执行写子操作,包括:
为所述第一目标数据库分配线程,作为第二线程;
确定所述第一目标数据库的第二地址;
调用所述第二线程访问所述第二地址,以向所述第一目标数据库写所述业务数据;
释放所述第二线程;
所述对所述第二目标数据库执行写子操作,包括:
为所述第二目标数据库分配线程,作为第三线程;
确定所述第二目标数据库的第二地址;
调用所述第三线程访问所述第二地址,以向所述第一目标数据库写所述业务数据;
释放所述第三线程。
在上述实施例的基础上,还包括报错模块,用于:
统计对同一个所述从数据库执行所述写子操作失败的次数;
当所述次数超过预设的阈值时,对所述从数据库生成报错信息。
本实施例提供的一种业务数据的写装置可用于执行上述实施例一或实施例二提供的一种业务数据的写方法,具有相应的功能和有益效果。
实施例六
图6为本发明实施例六提供的一种业务数据的读装置的结构图。包括:第二数据接收模块61、第二数据类型确定模块62、目标数据库确定模块63和读操作执行模块64。其中:
第二数据接收模块61,用于接收数据操作;
第二数据类型确定模块62,用于确定所述数据操作的操作类型;
目标数据库确定模块63,用于若所述操作类型为读操作,则从所述从数据库中选择目标数据库;
读操作执行模块64,用于对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。
本发明实施例接收数据操作;确定所述数据操作的操作类型;若所述操作类型为读操作,则从所述从数据库中选择目标数据库;对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。通过确定目标数据库保证了业务数据的就近读取。同时,通过区分主数据库与从数据库,仅仅通过从数据库读取业务数据降低证了主数据库与从数据库的交互关系。
在上述实施例的基础上,读操作执行模块64还用于:
为所述目标数据库分配线程;
确定所述目标数据库的地址;
调用所述线程访问所述地址,以从所述目标数据库读取所述数据操作所作用的业务数据;
释放所述线程。
本实施例提供的一种业务数据的读装置可用于执行上述实施例三或实施例四提供的一种业务数据的读方法,具有相应的功能和有益效果。
实施例七
图7为本发明实施例七提供的一种电子设备的结构示意图。如图7所示,该电子设备包括处理器70、存储器71、通信模块72、输入装置73和输出装置74;电子设备中处理器70的数量可以是一个或多个,图7中以一个处理器70为例;电子设备中的处理器70、存储器71、通信模块72、输入装置73和输出装置74可以通过总线或其他方式连接,图7中以通过总线连接为例。
存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本实施例中的一种业务数据的写方法对应的模块(例如,一种业务数据的写装置中的第一数据接收模块51、第一数据类型确定模块52、第一写操作执行模块53和第二写操作执行模块54)。或者存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本实施例中的一种业务数据的读方法对应的模块(例如,一种业务数据的读装置中的第二数据接收模块61、第二数据类型确定模块62、目标数据库确定模块63和读操作执行模块64)。
处理器70通过运行存储在存储器71中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的一种业务数据的写方法或者一种业务数据的读方法。
存储器71可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器71可进一步包括相对于处理器70远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信模块72,用于与显示屏建立连接,并实现与显示屏的数据交互。输入装置73可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。
本实施例提供的一种电子设备,可执行本发明任一实施例提供的一种业务数据的写方法或者一种业务数据的读方法,具体相应的功能和有益效果。
实施例八
本发明实施例八还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种业务数据的写方法,该方法包括:
接收数据操作;
确定所述数据操作的操作类型;
若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;
若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。
或者,所述计算机可执行指令在由计算机处理器执行时用于执行一种业务数据的读方法,该方法包括:
接收数据操作;
确定所述数据操作的操作类型;
若所述操作类型为读操作,则从所述从数据库中选择目标数据库;
对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明实施例一、实施例二所提供的一种业务数据的写方法或者实施例三、实施例四所提供的一种业务数据的读方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机电子设备(可以是个人计算机,服务器,或者网络电子设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述一种业务数据的写装置或者一种业务数据的读装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种业务数据的写方法,其特征在于,在一分布式的数据集群中包含主数据库、从数据库与一代理,所述方法应用于所述代理中,包括:
接收数据操作;
确定所述数据操作的操作类型;
若所述操作类型为写操作,则执行第一写操作,所述第一写操作用于将所述数据操作所作用的业务数据写入所述主数据库;
若所述第一写操作执行成功,则执行第二写操作,所述第二写操作用于将所述业务数据写入所有从数据库,以使所述主数据库与所有从数据库同步所述业务数据。
2.根据权利要求1所述的方法,其特征在于,所述代理记录有所述主数据库的第一地址,所述代理创建有线程池,所述线程池中具有线程;
所述执行第一写操作,包括:
为所述主数据库分配线程,作为第一线程;
确定所述主数据库的第一地址;
调用所述第一线程访问所述第一地址,以向所述主数据库写入所述业务数据;
释放所述第一线程。
3.根据权利要求1所述的方法,其特征在于,所述从数据库的数量为至少两个,所述代理记录有所述从数据库的第二地址;
所述执行第二写操作,包括:
确定第一目标数据库,所述第一目标数据库为未执行写子操作的从数据库;
对所述第一目标数据库执行写子操作,所述写子操作用于写入所述业务数据;
判断将所述业务数据是否成功写入所述第一目标数据库;
若是,则确认所述主数据库与所述第一目标数据库成功同步所述业务数据,返回执行所述确定第一目标数据库。
4.根据权利要求3所述的方法,其特征在于,所述执行第二写操作,还包括:
确定第二目标数据库,所述第二目标数据库为执行所述写子操作失败的从数据库;
对所述第二目标数据库执行所述写子操作;
判断将所述业务数据是否成功写入所述第二目标数据库;
若是,则确认所述主数据库与所述第二目标数据库成功同步所述业务数据,返回执行所述确定第二目标数据库。
5.根据权利要求4所述的方法,其特征在于,所述代理记录有所述从数据库的第二地址,所述代理创建有线程池,所述线程池中具有线程;
所述对所述第一目标数据库执行写子操作,包括:
为所述第一目标数据库分配线程,作为第二线程;
确定所述第一目标数据库的第二地址;
调用所述第二线程访问所述第二地址,以向所述第一目标数据库写所述业务数据;
释放所述第二线程;
所述对所述第二目标数据库执行写子操作,包括:
为所述第二目标数据库分配线程,作为第三线程;
确定所述第二目标数据库的第二地址;
调用所述第三线程访问所述第二地址,以向所述第一目标数据库写所述业务数据;
释放所述第三线程。
6.根据权利要求4所述的方法,其特征在于,还包括:
统计对同一个所述从数据库执行所述写子操作失败的次数;
当所述次数超过预设的阈值时,对所述从数据库生成报错信息。
7.一种业务数据的读方法,其特征在于,在一分布式的数据集群中包含主数据库、从数据库与一代理,所述方法应用于所述代理中,包括:
接收数据操作;
确定所述数据操作的操作类型;
若所述操作类型为读操作,则从所述从数据库中选择目标数据库;
对所述目标数据库执行读操作,所述读操作用于读取所述数据操作所作用的业务数据。
8.根据权利要求7所述的方法,其特征在于,所述代理记录有所述从数据库的地址,所述代理创建有线程池,所述线程池中具有线程;
所述对所述目标数据库执行读操作,包括:
为所述目标数据库分配线程;
确定所述目标数据库的地址;
调用所述线程访问所述地址,以从所述目标数据库读取所述数据操作所作用的业务数据;
释放所述线程。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6任一所述的一种业务数据的写方法,
或者,
如权利要求7-8任一所述的一种业务数据的读方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,
该程序被处理器执行时实现如权利要求1-6任一所述的一种业务数据的写方法,
或者,如权利要求7-8任一所述的一种业务数据的读方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910374553.6A CN110096552A (zh) | 2019-05-07 | 2019-05-07 | 一种业务数据的读、写方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910374553.6A CN110096552A (zh) | 2019-05-07 | 2019-05-07 | 一种业务数据的读、写方法、装置、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110096552A true CN110096552A (zh) | 2019-08-06 |
Family
ID=67447120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910374553.6A Pending CN110096552A (zh) | 2019-05-07 | 2019-05-07 | 一种业务数据的读、写方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110096552A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112306993A (zh) * | 2020-11-06 | 2021-02-02 | 平安科技(深圳)有限公司 | 基于Redis的数据读取方法、装置、设备及可读存储介质 |
CN113590595A (zh) * | 2021-09-30 | 2021-11-02 | 苏州浪潮智能科技有限公司 | 一种数据库多写方法、装置及相关设备 |
CN114595245A (zh) * | 2022-03-18 | 2022-06-07 | 上海哔哩哔哩科技有限公司 | 数据处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
CN103530427A (zh) * | 2013-11-04 | 2014-01-22 | 北京京东尚科信息技术有限公司 | 一种基于多数据库的动态切换方法和装置 |
CN103729373A (zh) * | 2012-10-15 | 2014-04-16 | 北京新媒传信科技有限公司 | 一种数据库代理方法和装置 |
CN107301179A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 数据库读写分离的方法和装置 |
US20190065258A1 (en) * | 2017-08-30 | 2019-02-28 | ScalArc Inc. | Automatic Provisioning of Load Balancing as Part of Database as a Service |
-
2019
- 2019-05-07 CN CN201910374553.6A patent/CN110096552A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622427A (zh) * | 2012-02-27 | 2012-08-01 | 杭州闪亮科技有限公司 | 读写分离数据库的方法及系统 |
CN103729373A (zh) * | 2012-10-15 | 2014-04-16 | 北京新媒传信科技有限公司 | 一种数据库代理方法和装置 |
CN103530427A (zh) * | 2013-11-04 | 2014-01-22 | 北京京东尚科信息技术有限公司 | 一种基于多数据库的动态切换方法和装置 |
CN107301179A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 数据库读写分离的方法和装置 |
US20190065258A1 (en) * | 2017-08-30 | 2019-02-28 | ScalArc Inc. | Automatic Provisioning of Load Balancing as Part of Database as a Service |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112306993A (zh) * | 2020-11-06 | 2021-02-02 | 平安科技(深圳)有限公司 | 基于Redis的数据读取方法、装置、设备及可读存储介质 |
CN113590595A (zh) * | 2021-09-30 | 2021-11-02 | 苏州浪潮智能科技有限公司 | 一种数据库多写方法、装置及相关设备 |
CN114595245A (zh) * | 2022-03-18 | 2022-06-07 | 上海哔哩哔哩科技有限公司 | 数据处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200364092A1 (en) | Managing partitions in a scalable environment | |
CN112099918A (zh) | 容器化环境中的集群的实时迁移 | |
CN108932338B (zh) | 数据更新方法、装置、设备和介质 | |
US7895156B2 (en) | Method, system, and computer program product for implementing a model exchange framework generating a synchronization record in response to a model exchange request using fusion technology | |
US20170316026A1 (en) | Splitting and moving ranges in a distributed system | |
CN110096552A (zh) | 一种业务数据的读、写方法、装置、设备和存储介质 | |
CN109886693B (zh) | 区块链系统的共识实现方法、装置、设备和介质 | |
KR20140119090A (ko) | 확장 가능한 환경에서의 동적 로드 밸런싱 기법 | |
CN112083889A (zh) | 数据迁移方法、装置、设备及可读存储介质 | |
JP2009237826A (ja) | ストレージシステム及びそのボリューム管理方法 | |
CN113268472B (zh) | 一种分布式数据存储系统及方法 | |
US20210089379A1 (en) | Computer system | |
CN110188114A (zh) | 一种数据操作的优化方法、装置、系统、设备和存储介质 | |
CN111291062B (zh) | 数据同步写入方法、装置、计算机设备及存储介质 | |
CN113760847A (zh) | 日志数据处理方法、装置、设备及存储介质 | |
CN114356521A (zh) | 任务调度方法、装置、电子设备及存储介质 | |
CN111274004A (zh) | 进程实例管理方法、装置及计算机存储介质 | |
CN115587147A (zh) | 一种数据处理方法及系统 | |
CN115470303A (zh) | 一种数据库访问方法、装置、系统、设备及可读存储介质 | |
CN113590643B (zh) | 基于双轨数据库的数据同步方法、装置、设备和存储介质 | |
US7260611B2 (en) | Multi-leader distributed system | |
CN114827177A (zh) | 一种分布式文件系统的部署方法、装置及电子设备 | |
AU2021240195A1 (en) | Data processing method, apparatus, system and device and computer-readable storage medium | |
JP2015095015A (ja) | データ配置方法、データ配置プログラムおよび情報処理システム | |
JP6244496B2 (ja) | サーバストレージシステムの管理システム及び管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190806 |