[0082]步骤503、将事务实例中存储的第一非关系型数据库的事务状态由没有事务状态修改为事务已开始状态;
[0083]步骤504、将数据写入第一非关系型数据库(备数据库)中,并将与数据对应的键值存储到事务实例中;
[0084]步骤505、判断写数据是否出现异常,若是,执行步骤512,若否,执行步骤506 ;
[0085]步骤506、判断数据是否写入完成,若是,执行步骤507,若否,返回执行步骤504 ;
[0086]步骤507、获取事务结束请求;
[0087]步骤508、将第一非关系型数据库在事务实例中的状态由备数据库修改为主数据库,将第二非关系型数据库在事务实例中的状态由主数据库修改为备数据库;
[0088]步骤509、将事务实例中存储的第一非关系型数据库的事务状态由已开始状态修改为事务同步状态;
[0089]步骤510、根据事务实例中存储的键值,将写入第一非关系型数据库中与键值对应的数据同步到第二非关系型数据库中;
[0090]步骤511、将事务实例中存储的第一非关系型数据库的事务状态由事务同步状态修改为没有事务状态,流程结束;
[0091]步骤512、触发事务回滚操作;
[0092]步骤513、根据事务实例中存储的键值,将第二非关系型数据库中与键值对应的数据同步到第一非关系型数据库中;
[0093]步骤514、将事务实例中存储的第一非关系型数据库的事务状态由事务已开始状态修改为没有事务状态,流程结束。
[0094]本实施例对非关系型数据库支持事务进行了详细说明,本实施例提供的方法,可以使任意的非关系型数据库支持事务提交、事务回滚以及事务提交过程中数据依然可读。
[0095]图6为本发明非关系型数据库支持事务的装置实施例一的结构示意图。如图6所不,本实施例提供的装置包括:第一获取模块601,写入模块602,第二获取模块603,第一同步模块604。
[0096]第一获取模块601,用于获取事务开始请求,所述事务开始请求用于指示数据写入;
[0097]写入模块602,用于将数据写入第一非关系型数据库中,并将与所述数据对应的键值存储到所述事务实例中,其中,所述第一非关系型数据库在所述事务实例中的状态为备数据库;
[0098]第二获取模块603,用于在所述数据写入完成后,获取事务结束请求,所述事务结束请求用于指示所述第一非关系型数据库与第二非关系型数据库的数据同步,其中,所述第二非关系型数据库在所述事务实例中的状态为主数据库;
[0099]第一同步模块604,用于根据所述事务实例中存储的键值,将写入所述第一非关系型数据库中与所述键值对应的数据同步到所述第二非关系型数据库中;
[0100]其中,所述备数据库用于写入数据,所述主数据库用于读出数据。
[0101]图7为本发明非关系型数据库支持事务的装置实施例二的结构示意图,本实施例在图6实施例的基础上实现,具体如下:
[0102]可选地,所述装置还包括:状态修改模块605,用于在所述写入模块602根据所述事务实例中存储的键值,将写入所述第一非关系型数据库中与所述键值对应的数据同步到所述第二非关系型数据库中之前,
[0103]将所述第一非关系型数据库在所述事务实例中的状态由备数据库修改为主数据库,将所述第二非关系型数据库在所述事务实例中的状态由主数据库修改为备数据库。
[0104]可选地,所述装置还包括:
[0105]事务回滚操作模块606,用于若数据写入第一非关系型数据库中出现异常,触发事务回滚操作;
[0106]第二同步模块607,用于根据所述事务实例中存储的键值,将所述第二非关系型数据库中与所述键值对应的数据同步到所述第一非关系型数据库中。
[0107]可选地,所述状态修改模块605还用于,在所述写入模块602将数据写入第一非关系型数据库中之前,根据所述事务实例中存储的所述第一非关系型数据库的事务状态,判断当前所述事务状态为没有事务状态;
[0108]将所述事务实例中存储的所述第一非关系型数据库的事务状态由所述没有事务状态修改为事务已开始状态。
[0109]可选地,所述状态修改模块605还用于,在所述第二同步模块607根据所述事务实例中存储的键值,将所述第二非关系型数据库中与所述键值对应的数据同步到所述第一非关系型数据库中之后,将所述事务实例中存储的所述第一非关系型数据库的事务状态由所述事务已开始状态修改为没有事务状态。
[0110]可选地,所述状态修改模块605还用于,在所述第一同步模块604根据所述事务实例中存储的键值,将写入所述第一非关系型数据备库中的数据同步到所述第二非关系型数据主库中之前,
[0111]将所述事务实例中存储的所述第一非关系型数据库的事务状态由所述已开始状态修改为事务同步状态;
[0112]所述根据所述事务实例中存储的键值,将写入所述第一非关系型数据备库中的数据同步到所述第二非关系型数据主库中之后,还包括:
[0113]将所述事务实例中存储的所述第一非关系型数据库的事务状态由所述事务同步状态修改为没有事务状态。
[0114]本发明实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
[0115]图8为本发明服务器实施例一的结构示意图。本发明实施例的非关系型数据库支持事务的装置可以内置在服务器80中实现。本发明实施例服务器80包括网络接口 801、处理器802、总线803以及存储器804,第一非关系型数据库、第二非关系型数据库以及事务实例可以存储在存储器804中,存储器804以及处理器802分别与总线803连接,处理器802通过总线803调用存储器804中存储的程序。可以执行以下操作:
[0116]处理器802通过网络接口 801获取事务开始请求,所述事务开始请求用于指示数据写入;
[0117]处理器802将数据写入第一非关系型数据库中,并将与所述数据对应的键值存储到所述事务实例中,其中,所述第一非关系型数据库在所述事务实例中的状态为备数据库;
[0118]在所述数据写入完成后,处理器802通过网络接口 801获取事务结束请求,所述事务结束请求用于指示所述第一非关系型数据库与第二非关系型数据库的数据同步,其中,所述第二非关系型数据库在所述事务实例中的状态为主数据库;
[0119]处理器802根据所述事务实例中存储的键值,将写入所述第一非关系型数据库中与所述键值对应的数据同步到所述第二非关系型数据库中;
[0120]其中,所述备数据库用于写入数据,所述主数据库用于读出数据。
[0121]可选地,在处理器802根据所述事务实例中存储的键值,将写入所述第一非关系型数据库中与所述键值对应的数据同步到所述第二非关系型数据库中之前,
[0122]处理器802还将所述第一非关系型数据库在所述事务实例中的状态由备数据库修改为主数据库,将所述第二非关系型数据库在所述事务实例中的状态由主数据库修改为备数据库。
[0123]可选地,若数据写入第一非关系型数据库中出现异常,触发事务回滚操作;处理器802根据所述事务实例中存储的键值,将所述第二非关系型数据库中与所述键值对应的数据同步到所述第一非关系型数据库中。
[0124]可选地,在处理器802将数据写入第一非关系型数据库中之前,处理器802还根据所述事务实例中存储的所述第一非关系型数据库的事务状态,判断当前所述事务状态为没有事务状态;将所述事务实例中存储的所述第一非关系型数据库的事务状态由所述没有事务状态修改为事务已开始状态。
[0125]可选地,处理器802根据所述事务实例中存储的键值,将所述第二非关系型数据库中与所述键值对应的数据同步到所述第一非关系型数据库中之后,处理器802还将所述事务实例中存储的所述第一非关系型数据库的事务状态由所述事务已开始状态修改