研发数据库的思路

一、设计目的
设计一款关系型网络数据库。


二、设计要求:
(一)安装快速
安装程序特别简单。

(二)配置简单
最小化配置。

(三)使用简单,高效
程序占用空间小,支持基本的SQL语法。

(四)稳定可靠
尽量不依赖其他不稳定库。

(五)其他要求
属于关系型数据库。
支持多个网络连接。
支持安全管理。


三、底层设计
1、支持什么操作系统平台:
Win10、Linux

2、编程语言:
最好的是C语言。
其次Java语言。

3、支持的网络连接方式:
TCP连接。

4、数据库服务器目录:
bin 存放二进制程序文件
conf 存放配置文件
lib 存放依赖库
data 存放数据文件
doc 存放使用介绍文件。

5、准备的知识点:
网络TCP编程、文件输入输出流、并发编程、独占锁、图形化编程、数据结构、算法优化和测试等等。


四、支持什么功能
(一)网络连接控制

(二)数据的关系型管理
支持数据库和数据表的管理。

(三)支持安全和事务控制


五、性能设计问题
1、如何达到快速存储大量数据的要求?
算法要设计合理。

2、一个数据库实例支持多少个库?

3、数据库支持多少个表?

4、数据表支持多少个字段?

5、一个表最大的数据存储量多少?

6、每秒支持多少个并发连接处理?


六、功能设计
(一)记录的存储结构
1、采用什么数据结构满足快速查询?
要求:查询快速,有索引,有模糊查询。
逻辑结构:B+树
物理结构:数组,链表。

2、数据库文件具体什么格式?什么文件扩展名?

3、表的字段怎么设计?怎么存储到文件里?

(二)磁盘文件的存储顺序
怎么设计才能让数据方便从外存中读取到内存中,又方便存储到外存中?
采用库–>表–>段–>页–>行记录

每个部分的占用字节数很重要。

(三)增删查改操作设计
在内存中完成,刷新和持久化需要写入到磁盘中,注意防止从开头覆盖文件,使用追加模式。

难点:
读写数据是在内存中完成,还是在磁盘文件中完成?

磁盘文件读写,可能跳跃一些字节,定位磁盘文件。

(四)什么读写架构:
多路复用+一个请求一个线程任务+线程池

(五)如何实现事务?
分两种数据库,一种支持,一种不支持。

(六)如何支持分库分表,数据库集群?

(七)如何设计基于TCP的数据库控制协议?
网络端口是哪个?


七、其他设计问题
(一)思考怎么跨平台运行和部署?

(二)思考怎么稳定运行?

(三)思考怎么最简单的安装(图形化安装、命令行安装)

(四)怎么设置开机自启动?
怎么设置后台运行?

(五)怎么设置环境变量?

(六)未来是否支持UDP连接?

(七)读写如何加锁?
锁住表的某行记录?
查询不加锁,只有插入和更新的时候才加锁。

(八)采用什么安全策略?
IP地址保护,密码保护,账号权限保护。

(九)如何修改密码?

(十)如何恢复初始化?

(十一)如何备份还原?

(十二)数据如何迁移到另一个库中?

(十三)有没有非关系型noSQL功能支持?

(十四)如何实现视图、函数、触发器、事件?


八、数据库最大的特点是什么
安装简单,大小简单。
功能最基本。
性能强大。
操作数据库的语言最简单。
支持SQL语言的通用规范。
满足最简单的,最频繁使用的功能。
程序文件简单高效,合理,少量。


九、连接和管理服务器的客户端:
支持两种管理方式:
命令行、图形化界面(客户端,网页版)


十、数据库服务器执行流程
1、客户端和服务端建立网络连接。
2、服务端开启线程处理这个连接。
3、客户端发送SQL命令。
4、服务端线程从网络套接字读取出命令。
5、服务器线程分析SQL命令。
6、服务器调用对应的方法。
7、服务器获得执行结果。
8、服务器向套接字返回执行结果给客户端。

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

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

相关文章

快速排序法

算法概况 快速排序(QuickSort)是对冒泡排序的一种改进,快速排序由C.A.R.Hoare在1960年提出。 算法思路 通过一趟排序将待排序数组分割成两部分,其中一部分所有数据都比另一部分所有数据小,然后再按此方法对这两部分…

02-CSS3基本样式

目录 1. CSS3简介 1.1 CSS3的兼容情况 1.2 优雅降级和渐进增强的开发思想 2. 新增选择器 2.1 选择相邻兄弟 2.2 匹配选择器 2.3 属性选择器(重点) 2.4 结构性伪类选择器(重点) 2.4.1 整体结构类型 2.4.2 标签结构类型 2.4.3 指定子元素的序号&…

模型训练、结果存储、API 调用的系列优化|ModelWhale 版本更新

蜂飞蝶舞,万物并秀,明媚的春光中 ModelWhale 带来新一轮的版本更新,期待为大家带来更优质的使用体验。 本次更新中,ModelWhale 主要进行了以下功能迭代: 新增 IDE 中使用训练记录(专业版✓ 团队版✓&…

Ansible04-Ansible Vars变量详解

目录 写在前面6 Ansible Vars 变量6.1 playbook中的变量6.1.1 playbook中定义变量的格式6.1.2 举例6.1.3 小tip 6.2 共有变量6.2.1 变量文件6.2.1.1 变量文件编写6.2.1.2 playbook编写6.2.1.3 运行测试 6.2.2 根据主机组使用变量6.2.2.1 groups_vars编写6.2.2.2 playbook编写6.…

迈的普拉姆利普绘图:深入解析与实战应用

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:matplotlib绘图的基本原理 代码案例 二、深入了解:matplo…

python数据库操作

数据库基本操作 一、 数据库操作1. mysql 驱动安装:2. mysql基本操作: 二、代码演示 一、 数据库操作 1. mysql 驱动安装: MySQL 是最流行的关系型数据库管理系统,如果你不熟悉 MySQL,可以阅读我们的 MySQL 教程。 本章节我们为…

数据结构与算法02-排序算法

介绍 排序算法是计算机科学中被广泛研究的一个课题。历时多年,它发展出了数十种算法,这些 算法都着眼于一个问题:如何将一个无序的数字数组整理成升序?先来学习一些“简单排序”,它们很好懂,但效率不如其他…

闽盾杯 2021 DNS协议分析

今年CISCN的Tough DNS 的前戏就是DNS协议分析 直接可以查找到flag的base64形式Zmxh 发现就是请求的dnslog 携带的数据 过滤器就是 dns tshark -r dns.pcapng -T json -Y "dns" >1.json 字段选择 dns.qry.name tshark -r dns.pcapng -T json -Y "dns"…

内网渗透-隧道搭建ssp隧道代理工具

内网渗透-隧道搭建&ssp隧道代理工具 目录 内网渗透-隧道搭建&ssp隧道代理工具spp隧道代理工具spp工作原理图cs上线主机spp代理通信服务端配置客户端配置CS配置设置CS生成木马的监听器配置CS监听上线的监听器生成木马 spp隧道搭建服务端配置客户端配置CS配置 内网穿透&a…

基于语音识别的智能电子病历(四)语音识别的要求

从本章开始 讲解 医疗行业的语音识别。在开始之前先聊聊 医疗行业的语音识别的一些要求。 识别的结果要满足下面的要求: 一、Capitalization单词大写处理 句首单词首字母大写.人称代词I出现在句中任何位置都要大写.标题(heading)全部字母大写.例如: PAST MEDICAL…

根据模板和git commit自动生成日·周·月·季报

GitHub - qiaotaizi/dailyreport: 日报生成器 GitHub - yurencloud/daily: 程序员专用的日报、周报、月报、季报自动生成器! config.json: { "Author": "gitname", "Exclude": ["update:", "add:", "…

实际测试stm32中断优先级

HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);第一个函数 HAL_NVIC_SetPriority 是用来设置单个优先级的抢占优先级和响应优先级的值。第二个…

恒压频比开环控制系统Matlab/Simulink仿真分析(SPWM控制方式)

介绍恒压频比的开环控制方法驱动永磁同步电机的转动,首先分析恒压频比的控制原理,然后在Matlab/Simulink中进行永磁同步电机恒压频比开环控制系统的仿真分析,最后将Simulink中的恒压频比控制算法生成代码加载到实际工程中进行工程实现。 一、…

丝绸之路网络安全论坛成功举办,开源网安受邀分享软件供应链安全落地经验

5月23日,2024第八届丝绸之路网络安全论坛在陕西宾馆会议中心成功举办,本次论坛由陕西省信息网络安全协会主办,以“汇聚万千智慧 夯实安全堤坝”为主题,邀请业内专家学者、企业代表、行业代表共计400余人参加。开源网安常务副总王颉…

【PostgreSQL17新特性之-冗余IS [NOT] NULL限定符的处理优化】

在执行一个带有IS NOT NULL或者NOT NULL的SQL的时候,通常会对表的每一行,都会进行检查以确保列为空/不为空,这是符合常理的。 但是如果本身这个列上有非空(NOT NULL)约束,再次检查就会浪费资源。甚至有时候…

Leetcode3165. 不包含相邻元素的子序列的最大和(Go中的线段树分治包含多类数据使用maintain进行维护)

题目截图 题目分析 不能取相邻的,就是打家劫舍 然后更改某一个值就是单点更新 更新后,需要更新区间的值 需要注意的是,使用分治时需要考虑到一头一尾的问题,所以有4种情况(选or不选在两个位置) 这四种情况…

tomcat-根据请求url映射servlet

之前说到对请求行和请求头进行解析,获取到请求信息,现在我们有了请求信息,就要根据请求url映射到servlet进行处理,接下来开始看这个过程。tomcat处理请求的线程中CoyoteAdapter.java的service中,通过postParseRequest(req, reques…

编程入门(七)【虚拟机VMware安装Linux系统Ubuntu】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀Ubuntu知多少🚀安装的前期准备&am…

SQL—DQL之执行顺序(基础)

一、引言 1、编写顺序 2、执行顺序 介绍: DQL语句(数据查询语句) 1、首先先执行的是 FROM ,通过 FROM 来决定我要查询的是哪一张表的数据。 2、紧接着通过 WHERE 来指定查询的条件。 3、第三步就是通过 GROUP BY 以及 HAVING 来…

Nginx 实战-03-nginx 负载均衡

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …