当前位置: 首页 > news >正文

深入理解主从数据库架构与主从复制

目录

  • 前言
  • 1. 主从数据库概述
    • 1.1 什么是主从数据库?
    • 1.2 主从数据库的应用场景
  • 2. 主从数据库的工作原理
    • 2.1 主从数据库的读写分离
    • 2.2 数据同步机制
    • 2.3 异步与同步复制模式
  • 3. 主从复制的实现步骤
    • 3.1 配置主库
    • 3.2 配置从库
  • 4. 主从数据库架构的优缺点
    • 4.1 优点
    • 4.2 缺点
  • 5. 结语

前言

随着互联网和大数据时代的到来,数据库的性能与可扩展性变得尤为重要。在高并发、高可用的业务场景中,如何有效地分担数据库的压力、提升系统的性能和可靠性,成为了开发者和架构师们的重要课题。主从数据库架构就是一种常见的解决方案,它能够通过将读操作和写操作分离,来提高数据库的负载能力,确保数据的高可用性。

本文将深入探讨主从数据库的概念、作用以及主从复制的实现过程,帮助大家更好地理解这一架构及其在实际应用中的重要性。

1. 主从数据库概述

1.1 什么是主从数据库?

主从数据库是一种数据库架构模式,它由一台主数据库(Master)和多台从数据库(Slave)组成。在这种架构中,主数据库负责所有的数据写操作(INSERT、UPDATE、DELETE),而从数据库则主要承担数据读取任务(SELECT)。通过这种读写分离的方式,主数据库和从数据库能够高效协同工作,以提高系统的性能和可用性。

主从数据库架构的设计可以根据实际需求进行调整,其中主库通常是性能最强的一台机器,负责承载所有的写入请求,而从库则是主库的副本,它会定期从主库获取数据,并保持同步。通过多个从库的配合,系统的读操作可以被均衡分摊到不同的节点上,从而提高整体系统的性能。

1.2 主从数据库的应用场景

主从数据库架构适用于以下几种常见的场景:

  1. 高并发应用: 在用户访问量非常大的应用中,读请求通常占据了大部分的负载。主从架构可以通过将读操作分散到多个从库上,减少主库的负担,从而提高整体系统的吞吐量。
  2. 高可用性: 主从复制提供了数据冗余的机制。如果主库发生故障,可以通过切换到从库来确保服务的连续性,增强系统的容灾能力。
  3. 数据备份: 从库不仅仅用于读取操作,还可以作为主库数据的备份。这样,即使主库发生问题,也能够保证数据不丢失。

2. 主从数据库的工作原理

2.1 主从数据库的读写分离

主从数据库的核心优势之一就是实现了读写分离。在传统的单一数据库架构中,所有的操作(无论是读还是写)都只能依赖于单一数据库实例。随着业务的增长,这种架构将面临巨大的性能瓶颈,尤其是当系统需要处理大量的查询请求时。

主从数据库架构则通过将写操作集中到主库上,而将读操作分发到从库上,从而将读写负载分开,避免了读操作对写操作的干扰,显著提高了数据库系统的性能。
在这里插入图片描述

2.2 数据同步机制

主从数据库的另一个关键特性是数据同步。主库的所有写操作都会通过主从复制的机制,自动同步到从库。这确保了从库的数据与主库保持一致,从库始终是主库的镜像。数据同步的实现通常通过以下步骤:

  1. 主库记录写操作: 主库的所有数据修改操作(如 INSERT、UPDATE、DELETE)会被记录到主库的二进制日志(Binlog)中,供从库读取。
  2. 从库拉取日志: 从库通过 I/O 线程定期向主库请求最新的 Binlog,将主库的写操作拉取到本地的中继日志(Relay Log)中。
  3. 从库执行写操作: 从库的 SQL 线程读取中继日志,执行相应的操作,使得从库的数据与主库保持一致。
    在这里插入图片描述

2.3 异步与同步复制模式

根据复制的方式不同,主从复制可以分为异步复制半同步复制全同步复制几种模式。

  1. 异步复制: 这是最常见的复制方式,主库在提交事务后不会等待从库的反馈,立即返回给客户端。这种方式虽然性能较好,但在主库和从库之间存在数据同步延迟的风险,主库可能在从库还未接收到数据时就发生故障。
  2. 半同步复制: 在主库提交事务后,它至少会等待一个从库确认已接收到该事务的 Binlog,然后再返回给客户端。这种方式较为安全,能够减少数据丢失的风险,但仍然存在一定的延迟。
  3. 全同步复制: 主库会等待所有的从库都成功接收到并执行完所有的事务后,才会返回给客户端。这种方式确保了数据的一致性,但性能较差,尤其是在从库较多的情况下,延迟会显著增加。

3. 主从复制的实现步骤

3.1 配置主库

主库配置相对简单,主要的工作是启用二进制日志,并确保每次数据变更都会记录到日志中。具体步骤如下:

  1. 启用 Binlog: 在主库的配置文件中(my.cnfmy.ini),启用 Binlog 并设置服务器 ID。例如:

    server-id = 1
    log-bin = mysql-bin
    
  2. 创建复制账号: 为从库创建一个专门用于复制的账号,该账号需要有 REPLICATION SLAVE 权限。可以通过以下 SQL 创建:

    CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
    FLUSH PRIVILEGES;
    
  3. 获取主库的日志位置: 记录当前主库的二进制日志文件名和位置,用于从库的同步起点。可以通过以下命令获取:

    SHOW MASTER STATUS;
    

3.2 配置从库

从库需要配置连接到主库,并拉取 Binlog 进行数据同步。具体步骤如下:

  1. 配置服务器 ID: 在从库的配置文件中,设置唯一的服务器 ID。例如:

    server-id = 2
    
  2. 连接主库: 配置从库连接主库的账号信息、主库的 IP 地址以及 Binlog 文件和位置。执行以下 SQL:

    CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='replica',MASTER_PASSWORD='password',MASTER_LOG_FILE='记录的Binlog文件名',MASTER_LOG_POS=记录的Binlog位置;
    
  3. 启动复制进程: 启动从库的 I/O 线程和 SQL 线程,开始进行数据同步:

    START SLAVE;
    
  4. 检查复制状态: 使用以下命令检查复制是否正常进行:

    SHOW SLAVE STATUS\G
    

4. 主从数据库架构的优缺点

4.1 优点

  1. 性能优化: 主从架构可以将读操作负载分散到多个从库上,提高系统的整体吞吐量。
  2. 高可用性: 通过从库的冗余备份,系统在主库故障时可以迅速切换,减少系统宕机时间。
  3. 扩展性: 当读请求不断增加时,可以通过增加更多的从库来水平扩展系统。
  4. 数据备份与恢复: 从库可以用作数据备份,减少主库的备份压力,确保数据安全。

4.2 缺点

  1. 延迟问题: 尽管使用了复制机制,但由于网络延迟和复制延迟等因素,从库的数据可能稍有滞后,可能导致读取的结果不完全实时。
  2. 复杂性: 主从复制的配置和管理相对复杂,需要保证主库与从库的网络连接稳定,监控复制状态等。
  3. 写瓶颈: 主库仍然是所有写操作的瓶颈,若主库的负载过高,可能会影响整个系统的性能。

5. 结语

主从数据库架构是现代分布式系统中非常重要的一环。通过读写分离、负载均衡、数据备份等手段,主从架构能够显著提升数据库的性能、可靠性和可扩展性。然而,尽管主从架构有着诸多优势,我们仍然需要注意数据同步的延迟问题、配置复杂性和主库的写瓶颈等挑战。

理解主从数据库的工作原理和应用场景,能够帮助我们更好地设计和优化系统架构,在应对高并发和高可用需求时做出合理的决策。希望本文能够为你提供有价值的参考,助力你在实际工作中充分利用主从数据库架构,提升系统的整体性能和可用性。

相关文章:

深入理解主从数据库架构与主从复制

目录 前言1. 主从数据库概述1.1 什么是主从数据库?1.2 主从数据库的应用场景 2. 主从数据库的工作原理2.1 主从数据库的读写分离2.2 数据同步机制2.3 异步与同步复制模式 3. 主从复制的实现步骤3.1 配置主库3.2 配置从库 4. 主从数据库架构的优缺点4.1 优点4.2 缺点…...

【C】初阶数据结构15 -- 计数排序与稳定性分析

本文主要讲解七大排序算法之外的另一种排序算法 -- 计数排序 目录 1 计数排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 4) 计…...

@PostConstruct @PreDestroy

PostConstruct 是 Java EE(现 Jakarta EE)中的一个注解,用于标记一个方法在对象初始化完成后立即执行。它在 Spring 框架、Java Web 应用等场景中广泛使用,主要用于资源初始化、依赖注入完成后的配置等操作。 1. 基本作用 执行时…...

2025数维杯数学建模A题完整限量论文:空中芭蕾——蹦床运动的力学行为分析

2025数维杯数学建模A题完整限量论文:空中芭蕾——蹦床运动的力学行为分析 ,先到先得 A题完整论文https://www.jdmm.cc/file/2712067/ 蹦床( Trampoline )是一项运动员利用蹦床的反弹,在空中展示技能 技巧的竞技运动&…...

Kubernetes Gateway API 部署详解:从入门到实战

引言 在 Kubernetes 中管理网络流量一直是一个复杂而关键的任务。传统的 Ingress API 虽然广泛使用,但其功能有限且扩展性不足。Kubernetes Gateway API 作为新一代标准,提供了更强大的路由控制能力,支持多协议、跨命名空间路由和细粒度的流量管理。本文将带你从零开始部署…...

移动设备常用电子屏幕类型对比

概述 LCD 家族 (TN、STN、TFT、IPS、VA)依赖背光,性能差异主要来自液晶排列和驱动方式。OLED 以自发光为核心优势,但成本与寿命限制其普及。E-Paper 专为低功耗静态显示设计,与传统屏幕技术差异显著。 参数LCD&#…...

HarmonyOS开发-组件市场

1. HarmonyOS开发-组件市场 HarmonyOS NEXT开源组件市场是一个独立的插件,需通过DevEco Studio进行安装,可以点击下载,无需解压,直接通过zip进行安装,具体安装和使用方法可参考HarmonyOsNEXT组件市场使用说明。Harmony…...

效果图云渲染:价格、优势与使用技巧

对于做3D设计来说,渲染效果图会占用设计电脑的资源,如果能免去这个环节就好了。用设计电脑渲不仅拖慢电脑速度,遇到紧急情况无法快速渲染出来还可能耽误进度。而云渲染的出现,正是针对这个点——渲的快,价格便宜&#…...

OptiStruct实例:声振耦合超单元应用

如图10-11所示,本例采用一个简化的整车模型,模型分为车身(含声腔)与底盘两部分。首先分别运用CMS与CDS方法对车身(含声腔)模型进行缩聚,生成.h3d格式的CMS超单元和cps超单元,然后进行…...

排序算法-插入排序

插入排序是一种简单直观的排序算法,其核心思想是将未排序部分的元素逐个插入到已排序部分的正确位置,类似于整理扑克牌。 插入排序步骤 初始化:将序列的第一个元素视为已排序部分,其余为未排序部分。 选择元素:从未排…...

Uniapp Android/IOS 获取手机通讯录

介绍 最近忙着开发支付宝小程序和app,下面给大家介绍一下 app 获取通讯录的全部过程吧,也是这也是我app开发中的一项需求吧。 效果图如下 勾选配置文件 使用uniapp开发的童鞋都知道有一个配置文件 manifest.json 简单的说一下,就是安卓/ios/…...

【RAG】index环节中 关于嵌入模型和 ColBERT

1. 什么是嵌入模型?是不是把数据源转换为向量表示的模型? 是的,嵌入模型(Embedding Model)的核心功能就是将各种类型的数据(例如,文本、图像、音频等)转换成低维、稠密的向量表示。…...

一文掌握 LVGL 9 的源码目录结构

文章目录 📂 一文掌握 LVGL 9 的源码目录结构🧭 顶层目录概览📁 1. src/ — LVGL 的核心源码(🔥重点)📁 2. examples/ — API 示例📁 3. demos/ — 综合演示项目📁 4. do…...

ROS1 和 ROS2 在同一个系统中使用

一、环境变量设置 echo "ros noetic(1) or ros2 foxy(2)?" read edition if [ "$edition" -eq "1" ]; thensource /opt/ros/noetic/setup.bash elsesource /opt/ros/foxy/setup.bash fi 二、针对不同的ROS版本创建不同的工作空间work space...

Redis 8.0携新功能,重新开源

01 引言 Redis从7.4版本起,将开源许可证改成 RSALv2(Redis 源代码可用许可证)与 SSPLv1(服务器端公共许可证)的双重授权策略。简单来说,就是不能随意商用。为了抵制Redis,Redis的替代品Valkey、…...

AD原理图复制较多元器件时报错:“InvalidParameter Exception Occurred In Copy”

一、问题描述 AD原理图复制较多元器件时报错:AD原理图复制较多元器件时报错:“InvalidParameter Exception Occurred In Copy”。如下图 二、问题分析 破解BUG。 三、解决方案 1、打开参数配置 2、打开原理图优先项中的通用配置,取消勾选G…...

【wpf】12 在WPF中实现HTTP通信:封装HttpClient的最佳实践

一、背景介绍 在现代桌面应用开发中,网络通信是不可或缺的能力。WPF作为.NET平台下的桌面开发框架,可通过HttpClient轻松实现与后端API的交互。本文将以一个实际的HttpsMessages工具类为例,讲解如何在WPF中安全高效地封装HTTP通信模块。 二、…...

从概念表达到安全验证:智能驾驶功能迎来系统性规范

随着辅助驾驶事故频发,监管机制正在迅速补位。面对能力表达、使用责任、功能部署等方面的新要求,行业开始重估技术边界与验证能力,数字样机正成为企业合规落地的重要抓手。 2025年以来,围绕智能驾驶功能的争议不断升级。多起因辅…...

金贝灯光儿童摄影3大布光方案,解锁专业级童趣写真

随着亲子消费的持续升温,儿童摄影行业对高效、专业、灵活的专业灯光需求日益迫切。为精准解决儿童拍摄中孩子好动难配合、氛围单调、出片效率低下等痛点,深耕影像光源行业三十年,拥有丰富的商业人像摄影灯光解决方案的金贝品牌,近…...

双端口ram与真双端口ram的区别

端口独立性 真双端口RAM:拥有两个完全独立的读写端口(Port A和Port B),每个端口都有自己的地址总线、数据总线、时钟、使能信号和写使能信号。这意味着两个端口可以同时进行读写操作,且互不干扰。 伪双端口RAM&…...

Java设计模式之单例模式:从入门到精通

一、单例模式概述 1.1 什么是单例模式 定义:单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。 专业解释:单例模式通过限制类的实例化过程,保证在整个应用程序生命周期中,某个类最多只有一个实例存在,…...

sqli-labs靶场18-22关(http头)

目录 less18(user-agent) less19(referer) less20(cookie) less21(cookie) less22(cookie) less18(user-agent) 这里尝试了多次…...

【图像大模型】Stable Diffusion Web UI:深度解析与实战指南

Stable Diffusion Web UI:深度解析与实战指南 一、项目概述核心功能 二、项目运行方式与执行步骤1. 环境准备2. 安装步骤在Windows上安装在Linux上安装 3. 使用Web UI 三、执行报错及问题解决方法1. Python版本不兼容2. CUDA未正确安装3. 依赖库安装失败4. 内存不足…...

Linux 学习笔记1

Linux 学习笔记1 一、用户和用户组管理用户组操作用户操作 二、文件权限管理权限查看权限修改归属权修改 三、系统快捷操作四、软件管理包管理工具服务管理 五、文件系统操作软链接 六、时间管理七、网络管理基础命令端口与进程进程管理 八、环境变量基础操作 九、其他重要概念…...

单例模式的两种设计

单例模式确保一个类只有一个实例,并提供一个全局访问点。 1. 饿汉模式 (Eager Initialization) 饿汉模式在程序启动时就创建实例,线程安全。 cpp class EagerSingleton { public:// 删除拷贝构造函数和赋值运算符EagerSingleton(const EagerSingleton…...

【HarmonyOS NEXT+AI】问答05:ArkTS和仓颉编程语言怎么选?

在“HarmonyOS NEXTAI大模型打造智能助手APP(仓颉版)”课程里面,有学员提到了这样一个问题: 鸿蒙的主推开发语言不是ArkTS吗,本课程为什么使用的是仓颉编程语言? 这里就这位同学的问题,统一做下回复,以方便…...

20250509 相对论中的\*\*“无空间”并非真实意义上的虚无,而是时空结构尚未形成\*\*的状态。 仔细解释下这个

相对论中的**“无空间”并非真实意义上的虚无,而是时空结构尚未形成**的状态。 仔细解释下这个 相对论中的“无空间”这一概念,严格来说并非绝对的虚无,而是指在物理学上时空结构尚未形成或无法定义的状态。这种状态通常出现在宇宙起源和黑洞…...

T-SQL在SQL Server中判断表、字段、索引、视图、触发器、Synonym等是否存在

SQL Server创建或者删除表、字段、索引、视图、触发器前判断是否存在。 目录 1. SQL Server创建表之前判断表是否存在 2. SQL Server新增字段之前判断是否存在 3. SQL Server删除字段之前判断是否存在 4. SQL Server新增索引之前判断是否存在 5. SQL Server判断视图是否存…...

C——数组和函数实践:扫雷

此篇博客介绍用C语言写一个扫雷小游戏,所需要用到的知识有:函数、数组、选择结构、循环结构语句等。 所使用的编译器为:VS2022。 一、扫雷游戏是什么样的,如何玩扫雷游戏? 如图,是一个标准的扫雷游戏初始阶段。由此…...

Java中的分布式缓存与Memcached集成实战

一、概述 分布式缓存是提升系统性能和扩展性的关键技术之一。Memcached作为一种高性能的分布式内存对象缓存系统,在许多场景下被广泛使用。本文将深入探讨如何在Java项目中集成Memcached,实现高效的分布式缓存。 二、Memcached简介 Memcached是一种高…...

OpenCV播放摄像头视频

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 播放摄像头视频和播放视频文件类似,也是通过类VideoCapture来实现,只不过调用open的时候传入的是摄像头的索引号。如果计算机安装了一个摄像头,则open的第一个参数通常是0&…...

[计算机科学#13]:算法

【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要: 算法是解决问题的系统化步骤,不同的问题…...

git相关

1.将 dev 变基到 origin/master git rebase 是一个本地操作,它只会修改你当前所在分支的提交历史,而不会直接影响远程仓库或任何其他分支。 保持提交历史的线性和整洁: 这是 git rebase 最主要的目的。 想象一下 dev 分支是从 master 分支分…...

Web端项目系统访问页面很慢,后台数据返回很快,网络也没问题,是什么导致的呢?

Web端访问缓慢问题诊断指南(测试工程师专项版) ——从浏览器渲染到网络层的全链路排查方案 一、问题定位黄金法则(前端性能四象限) 1. [网络层] 数据返回快 ≠ 资源加载快(检查Content Download时间) 2. [渲染层] DOM复杂度与浏览器重绘(查看FPS指标) 3. [执行层…...

计算机系统结构-第九章-互联网络 第十章

目录 恒等函数:I(没变) 交换函数:某一位取反 如下 角标为0,第0位取反 均匀洗牌函数、混洗函数Shuffle :σ 左移一位 (左移右边补0,右移左边补0) 蝶式互连函数but…...

H5 移动端适配最佳实践落地指南。

文章目录 前言一、为什么需要移动端适配?二、核心适配方案1. 视口(Viewport)设置2. 三种适配方案 (仅供参考)(1)rem 适配方案(2)vw/vh 适配方案(3&#xff09…...

从电动化到智能化,法雷奥“猛攻”中国汽车市场

当前,全球汽车产业正在经历前所未有的变革,外资Tier1巨头开始向中国智能电动汽车市场发起新一轮“猛攻”。 在4月23日-5月2日上海国际车展期间,博世、采埃孚、大陆集团、法雷奥等全球百强零部件厂商纷纷发布战略新品与转型计划。在这其中&am…...

智能网联汽车 “中央计算” 博弈:RTOS 与跨域融合的算力分配挑战

一、引言 随着智能驾驶技术的飞速发展,汽车逐渐从传统的交通工具演变为移动的智能终端。智能网联汽车的核心竞争力日益体现在其强大的计算能力和高效的算力管理上。汽车电子电气架构(EEA)正经历从分布式架构向 “中央计算 区域控制” 架构的…...

springboot 加载 tomcat 源码追踪

加载 TomcatServletWebServerFactory 从 SpringApplication.run()方法进入 进入到 refresh () 方法 选择实现类 ServletWebServerApplicationContext 进入到 AbstractApplicationContext onRefresh() 方法创建容器 找到加载bean 得到 webServer 实例 点击 get…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月9日第72弹

从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀6-8个和值,可以做到100-300注左右。 (1)定…...

企业高性能WEB服务器—Nginx

Nginx介绍 Nginx是一款轻量级的网页服务器、反向代理服务器以及电子邮件代理服务器。 具有高并发(特别是静态资源)、占用系统资源少的特性。它不仅是Web服务软件,还具有反向代理负载均衡功能和缓存服务功能 具备如下基本特性 可针对静态资…...

neo4j图数据库基本概念和向量使用

一.节点 1.新建节点 create (n:GroupProduct {name:都邦高保额团意险,description: "保险产品名称"} ) return n CREATE:Neo4j 的关键字,用于创建新节点或关系。 (n:GroupProduct): n 是节点的临时别名(变量名&#…...

安全核查基线-3.用户umask设置策略

在Linux中,umask(用户文件创建掩码)是一个重要的权限管理机制,用于控制新创建的文件和目录的默认权限。umask的值决定了文件或目录的初始权限中哪些权限位会被屏蔽(即不可用)。 1. umask 的作用 文件默认权…...

UE像素流是什么

UE像素流是什么 UE像素流送是一种云渲染技术,由虚幻引擎(UE)提出,用于在浏览器中运行高画质3D应用或游戏。其原理是在远程计算机(可以是云端服务器或本地高性能服务器)上运行UE开发的应用程序,…...

【C】初阶数据结构14 -- 归并排序

本篇文章主要是讲解经典的排序算法 -- 归并排序 目录 1 递归版本的归并排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 2 迭代版本的归并…...

02_线性模型(回归线性模型)

描述 线性模型是在实践中广泛使用的一类模型,线性模型利用输入特征的线性函数(linear function)进行预测。 用于回归的线性模型 对于回归问题,线性模型预测的一般公式如下: $ \widehat y w[0]*x[0]w[1]*x[1]…w[p…...

当当网Top500书籍信息爬取与分析

爬取当当网的Top500书籍信息,并对书籍的评价数量进行排序,然后绘制前十名的条形图,然后对各个出版社出版的书籍数量进行排序,绘制百分比的饼图 # 导入所需的模块 import re # 正则表达式模块,用于提取文本中的特定模…...

Spring生态全景解析:Spring、Spring MVC、SpringBoot与Spring Cloud的关系

Spring生态全景解析:Spring、Spring MVC、SpringBoot与Spring Cloud的关系 1. Spring框架简介 Spring框架是一个轻量级的Java开发框架,由Rod Johnson于2003年创建。它主要解决了企业级Java开发中的复杂性,通过依赖注入(DI)和面向切面编程(A…...

STM32-TIM定时中断(6)

目录 一、TIM介绍 1、TIM简介 2、定时器类型 3、基本定时器 4、通用定时器 5、定时中断基本结构 6、时基单元的时序 (1)预分频器时序 (2)计数器时序 7、RCC时钟树 二、定时器输出比较功能(PWM) …...

Godot4.3类星露谷游戏开发之【昼夜循环】

千里之行,始于足下 文章目录 零、 笔记一、创造时间二、产生颜色三、搭建测试环境四、测试五、免费开源资产包 零、 笔记 为了让游戏可以拥有白天和黑夜,我们需要像上帝一样,在游戏中创造时间的规则,并在不同的时间点产生不同的颜…...