分布式数据库设计与实现

news2024/11/26 14:48:04

分布式数据库设计与实现

  • 摘要
  • 背景
  • 二期项目包括
  • 数据库选型
  • 分布式数据库设计
  • 数据集成
  • 测试
  • 部署分布式数据库
  • 扩展阅读

在这里插入图片描述

摘要

: 本文论述《金蚕工程》的分布式数据库的设计和实现。该项目的设计目标是实现企业间茧、丝等的合同交易(交易规则和期货交易一样)、实时行情和成交数据的发布、茧丝质押和质押数据的发布。所有功能均要求既能在企业局域网交易大厅和 Internet 上进行,许多功能又要在苏州和成都分中心进行。系统从设计时就把基于分布式数据库应用的可用性和可靠性作为系统一个关键目标。为了达到系统的上述要求,系统分别从数据库设计、应用数据集成和测试以及分布式数据库部署等做了大量工作。针对上述各部分,本文论述了分布式数据库的设计和实现及遇到过的典型问题和措施,最后对系统改进,谈一些自己的体会。 在项目开展期间,我担任了系统分析、系统设计与关键模块的编程等大量工作。

背景

该项目在 2020 年通过了浙江省软件评测中心的评测。 我于2019年底到 2020 年 6 月组织了中国茧丝绸市场由国家经贸部资助的《金蚕工程》一、二期项目的开发。由于原有系统存在如下问题: (一)原有系统采用传统 C/S 结构,客户端运行在 DOS 平台,后台使用 Foxpro 数据库。系统处理慢,前后台数据一致性,并且 Foxpro 服务器在交易高峰经常莫名其妙的死锁和 Down 机。 (二)市场是中国最大的茧丝交易市场,由于会员单位不断增加,原有远程电话拨入设备严重不够用,系统又不能通过 Internet 连接访问,进行合同交易和行情的及时查询,严重限制了市场的发展。 (三)原有系统只部分实现了合同交易和资金清算,功能和企业发展不相适应。 (四)由于会员在地区上分布不均匀,为了更好地服务于会员要求在满足一定条件下建立分中心交易系统。在这种情况下,市场决定开发基于 Internet B/S结构和基于 Xnetserver通讯中间件(类似 IBM MQSeries 的通讯中间件)的4-Tier 结构的综合软件,分中心采用基于分布式数据库地应用系统。一期项目包括:基于 4-Tier 的合同交易系统和资金清算系统,基于 Internet 的行情查询和信息发布的企业网站(www.es***.net)。

二期项目包括

二期项目包括:茧丝质押、仓库管理系统、 Internet 质押查询系统和分中心交易和资金结算系统。 鉴于该项目业务比较复杂,流程比较多,系统要兼顾企业交易大厅会员、远程 Internet 交易的会员和分交易中心会员,项目完成时间短等特点,为了既要项目的按期投产又要实现基于分布式数据库的分中心交易和资金结算系统,我从数据库选型、数据库设计、应用数据集成和测试以及分布式数据库部署如下工作。

数据库选型

(1)数据库选型。现在的主流数据库一般都可以按分布式进行部署,例如:SQL Server、Oracle、Informix和 DB2 等。由于一期项目的数据库平台是选择了 Oracle 7.0,经过了近一年的运行,其数据自动备份、多用户并发处理性能、磁盘表空间管理、Web数据发布等表现良好。我公司又由于开发过基于该平台的分布式应用系统,公司对其分布式实施也有相当的经验,所以经我们开发部相关人员的讨论,我决定在各分交易中心继续采用Oracle数据库来实现,其分布功能主要基于SQL.Net来完成。

分布式数据库设计

(2)分布式数据库设计。由于各交易品种的每节交易价格由市场的交易大厅决定,所以各分中心必须在每节交易开始前取得相关的交易数据。各分交易中心必须保留其会员已经交易成功的买入和卖出交易数据,并根据会员需要进行资金结算。经对分交易中心充分业务需求分析后,我觉得分交易中心的主要功能还是和主市场交易中心(简称:主中心)功能是一致的,只不过分交易中心的会员数比较少和无需保留各节的历史交易行情,所以,分中心的主要数据库中的各表还是照搬主市场数据库的各表,分中心只保留各自的会员基础数据和成交数据,保留会员历史交易数据,只保留当前的各节的交易行情,不保留历史行情。主中心必须保留各分中心的各项明细数据,主中心也必须及时计算分中心会员的汇总资金,所以主中心必须增加分中心汇总资金表。

数据集成

(3)数据集成。为了保证分中心及时下单,必须保证每节的交易行情要及时的传送到各交易分中心。节处理最后一步必须把下一节的交易行情传送送各交易分中心。同时下发给分中心的数据还有,分中心本节各会员的成交数据。由于主中心保留各分中心的各项数据,所以,分中心有新的会员加入必须同时更新分中心和主中心数据库;分中心会员资金有变动时也必须同时更新主数据库。由于各会员只能在当日交易结束后才能进行数据平仓,所以分中心平仓数据汇总后同意发送到主中心进行平仓。在上述设计的数据库到数据库操作的数据完整性和一致性由数据库的二阶段提交( 2 Phase Comit )来保证。由于Oracle 是一个比较成熟的数据库平台,又由于每次事务都不大,所以运行到现在也没有发现数据不一致现象,没有出现“单边帐”,数据处理也比较快。为了近一步保障各中心数据的一致性,我还做了一个同步程序,由主中心发起,对主中心和分中心数据进行比较。该程序可定期进行。

测试

(4)测试。由于一期项目已经运行了相当长的一段时间,系统已经相当稳定了。由鉴于2 Phase Commit 出色表现,所以基于分布式的测试没有觉得和集中数据库有太大的区别。唯一的感觉是在第一次建立远程数据库连接时,连接速度比较慢(有时超过20秒)。为了提高测试速度,我在同一个局域网中安装了三套Oracle,分别充当主中心和两个分中心进行测试。

部署分布式数据库

(5)部署分布式数据库。和集中时式的数据库不同,采用分布式系统,必须配置SQL.NET。其他的Oracle组件和子系统安全同本地安装数据库一样。 分布式数据库在逻辑上属于同一系统,使得应用不必关心远程数据库的物理位置,就可以像访问本地数据库一样访问远程数据库。采用分布式数据库可充分提高系统的处理能力、均衡网络负载,所以该分布式数据库应用方案在银行代收、代付业务处理、保险代理点等单位和机构中大量采用。但由于近些年来通信基础建设比较迅速,特别是2M、10M和100M光纤的推广,又为了节省下属网点的机房费用,各单位又不约而同的采用的集中方案。

扩展阅读

1.数据库
数据库(DB)是存放数据的仓库,而且这些数据存在一定的关联,并按一定的格式存放在计算机内。例如,把一个学校的学生、课程、成绩等数据有序地组织并存放在计算机内,就可以构成一个数据库。
2.数据库管理系统
数据库管理系统(DBMS)按一定的数据模型组织数据形成数据库,并对数据库进行管理。简单地说,DBMS 就是管理数据库的系统(软件)。数据库系统管理员(DataBase Administrator,DBA)通过DBMS对数据库进行管理。
目前,比较流行的DBMS有:Oracle、SQL Server、MySQL、Sybase、DB2、Access、Visual FoxPro等。其中,Oracle是目前最流行的大型关系数据库管理系统。本书介绍的是最新的Oracle 11g版。
3.数据库系统
数据、数据库、数据库管理系统与操作数据库的应用程序,加上支撑它们的硬件平台、软件平台和与数据库有关的人员一起构成了一个完整的数据库系统。如图1.1所示描述了数据库系统的构成。在这里插入图片描述
数据库管理系统根据数据模型对数据进行存储和管理,数据库管理系统采用的数据模型主要有层次模型、网状模型和关系模型。1.层次模型
层次模型将数据组织成一对多关系的结构,采用关键字来访问其中每一层次的每一部分。它存取方便且速度快;结构清晰,容易理解;数据修改和数据库扩展容易实现;检索关键属性十分方便。但结构不够灵活;同一属性数据要存储多次,数据冗余大;不适合于拓扑空间数据的组织。
如图1.2所示为按层次模型组织的数据示例。
图1.2 按层次模型组织的数据示例2.网状模型
在这里插入图片描述

网状模型具有多对多类型的数据组织方式。它能明确而方便地表示数据间的复杂关系;数据冗余小。但网状结构的复杂增加了用户查询和定位的困难;需要存储数据间联系的指针,使得数据量增大;数据的修改不方便。
如图1.3所示为按网状模型组织的数据示例。

图1.3 按网状模型组织的数据示例3.关系模型
在这里插入图片描述

关系模型以记录组或二维数据表的形式组织数据,以便于利用各种实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法。它的结构特别灵活,概念单一,满足所有布尔逻辑运算和数学运算规则形成的查询要求;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【springcloud 微服务】springcloud openfeign使用详解

目录 一、前言 二、openfeign介绍 2.1 openfeign介绍 2.2 openfeign优势 三、Spring Cloud Alibaba整合OpenFeign 3.1 前置准备 3.2 代码整合过程 3.2.1 添加feign依赖 3.2.2 添加feign接口类 3.2.3 调整调用的方法 3.2.4 核心配置文件 3.2.5 接口模拟测试 四…

libevent介绍和使用

libevent介绍 libevent 是一个开源的事件通知库,它提供了一个跨平台的抽象接口,libevnet处理的事件包括网络IO事件,定时事件以及信号事件。它可以在不同的操作系统上使用,包括Linux、Windows和Mac OS X等。libevent 的主要目的是…

最全面的ChatGPT镜像网址:值得三连~~~

ChatGPT是一个基于人工智能的聊天机器人,它可以与用户进行自然语言交互。ChatGPT使用了最新的自然语言处理技术,包括深度学习和神经网络,以便更好地理解用户的意图和回答用户的问题。 ChatGPT可以回答各种问题,包括但不限于常见问…

69.建立手风琴组件第二部分

上节课我们构建了下图一样的基本样式,这节课我们来构建布局! ● 建立阴影,并生成grid布局 .item {box-shadow: 0 0 32px rgba(0,0,0,0.1);#添加外阴影,为半透明黑色,大小为0,0,32pxpadding: 24p…

C++编译Boost库读写和解析JSON文件和XML文件(2023.5.14)

C编译Boost读写并解析JSON文件和XML文件 需求分析前提环境(Win11、VS 2015)1、Boost简介1.1 为何使用Boost?1.2 Boost快速上手(Windows系统) 2、Boost 安装和使用2.1 自己下载源码编译生成Boost库(v 1.82.0)2.2 从官网…

基于微信平台教务管理系统的设计与实现(论文+源码)_kaic

摘 要 网络技术的快速发展也使得越来越多的研究学者将计算机技术应用到停车、医疗、商业、旅游等各行各业,这些传统行业在计算机技术的催动下,正在快速发展。为了顺应时代发展的变化,将计算机技术应用到教务管理领域显得极为重要。 本文设计…

哈希表+unordered_map封装

目录 1&#xff1a;hashtable.h 2&#xff1a;unordered_map.h 3&#xff1a;unordered_set 4&#xff1a;讲解 1&#xff1a;hashtable.h #pragma once #include<vector> using namespace std; namespace OpenAdress {enum State{EXIST,DELETE,EMPTY,};template<c…

redis淘汰策略

8种淘汰策略 volatile-lru&#xff0c;针对设置了过期时间的key&#xff0c;使用lru算法进行淘汰。 allkeys-lru&#xff0c;针对所有key使用lru算法进行淘汰。 volatile-lfu&#xff0c;针对设置了过期时间的key&#xff0c;使用lfu算法进行淘汰。 allkeys-lfu&#xff0c;针…

『C++』特殊类设计

「前言」文章是关于C特殊类设计方面的 「归属专栏」C嘎嘎 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 一点浩然气&#xff0c;千里快哉风。 ——苏轼《水调歌头黄州快哉亭赠张偓佺》 目录 一、请设计一个类&#xff0c;不能被拷贝 …

IDEA开发实现Maven+Servlet+Mybatis实现CRUD管理系统-Mapper代理开发

Mapper代理开发概述 之前我们写的代码是基本使用方式&#xff0c;它也存在硬编码的问题&#xff0c;如下&#xff1a; 这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用 Mapper 代理方式&#xff08;如下图&…

stm32之hal库学习(3)---STM32 启动模式分析

启动模式 我们知道的复位方式有三种&#xff1a;上电复位&#xff0c;硬件复位和软件复位。当产生复位&#xff0c;并且离开复 位状态后&#xff0c;CM3 内核做的第一件事就是读取下列两个 32 位整数的值&#xff1a; &#xff08;1&#xff09;从地址 0x0000 0000 处取出堆栈…

Linux基本指令----下

Linux基本指令----下 date指令cal指令find指令which指令whereis指令grep指令du指令zip/unzip指令tar指令bc指令uname -r指令关机指令重要热键结语 date指令 语法&#xff1a; date 指定格式显示时间&#xff1a; date %Y:%m:%d&#xff0c;date 用法&#xff1a;date [OPTION]…

【FPGA零基础学习之旅#5】产生非等占空比信号

&#x1f389;欢迎来到FPGA专栏~产生非等占空比信号 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

字节跳动 测试开发工程师 面试总结,小伙伴可以参考一下

目录 一面 二面 三面 个人总结&#xff1a; 一面 自我介绍 操作系统 虚拟内存的概念 进程和线程 线程同步 如何实现线程同步 计算机网络 说一下TCP 为什么是四次挥手呢 说一个ip地址&#xff0c;如果第一字节是269行不行 说一下HTTP&#xff08;自己讲了GET POST&…

[abc复盘] abc301 20230514

[abc复盘] abc301 20230514 总结A - Overall Winner1. 题目描述2. 思路分析3. 代码实现 B - Fill the Gaps1. 题目描述2. 思路分析3. 代码实现 C - AtCoder Cards1. 题目描述2. 思路分析3. 代码实现 D - Bitmask1. 题目描述2. 思路分析3. 代码实现 E - Pac-Takahashi1. 题目描…

Azure描述云服务类型

Azure描述云服务类型 基础结构即服务&#xff08;IaaS&#xff09;共担责任模型方案 介绍平台即服务&#xff08;PaaS&#xff09;共担责任模型方案 描述软件即服务&#xff08;SaaS&#xff09;共担责任模型方案 描述责任共担模型知识检查题目 基础结构即服务&#xff08;IaaS…

pyqt实现文件批量操作

代码逻辑 https://download.csdn.net/download/Lynqwest/87783077 文件打包 一、安装UPX 在https://github.com/upx/upx/releases/tag/v3.96下载相关版本&#xff0c;该网址无法进入&#xff0c;可参考https://download.csdn.net/download/Lynqwest/87783084 下载后将 upx…

谓词逻辑与推理演算

谓词逻辑 辖域 变元的约束—换自由变元 不容易出错 枚举 前束范式 量词例子 全称量词 ( ∀ x ) 条件前件加入 → (\forall x) 条件前件加入 \to (∀x)条件前件加入→ 存在量词 ( ∃ x ) 和取式 ∧ (\exists x) 和取式 \wedge (∃x)和取式∧ ∀ x P ( x ) ⟺ ∃ x P ( x ) \…

Mac M2芯片免安装版mysql

文章目录 1、下载mysql安装包2、移动解压目录并授权3、初始化mysql4、启动mysql5、启动错误处理6、登录mysql7、重置mysql密码 1、下载mysql安装包 先看一下本机mac信息 左上角&#xff0c;单机苹果的logo&#xff0c;然后单击“关于本机”&#xff0c;可以看到当前mac的信息 …

【JAVA进阶】Set集合、Map集合

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;JAVASE基础 目录 一、Set系列集合 1.HashSet 2.LinkedHashSet 3.TreeSet 二、补充知识 1.可变参数 2.集合工具类Collections 三、Map集合体系 1.Map集合的概述 2.Map集合体系特点 3.Map…