数据库技术选型:MySQL->冷热分离->分库分表->分布式数据库
在常见的业务场景中,数据量千万级别或以下,可以选择轻量级OLTP数据库,如MySQL。
如果数据量达到亿级以上,或者SQL查询比较复杂,首先基于业务场景考虑,是否可以实现冷热分离,将一些冷数据进行归档,降低MySQL 业务数据库中的数据量。
如果不满足冷热分离的条件,继续分析业务场景是读多写少,可以基于MySQL主从同步或Redis 实施读写分离的方案,将查询请求转移到MySQL 从库或者Redis 缓存中,降低MySQL 主库的访问压力。
如果读多写多,单MySQL 主库难以支撑,可以基于Sharding-JDBC开源方案,进行分库分表。
如果查询条件复杂,并发量高,可以搭建MySQL +Elasticsearch的查询分离方案,多维复杂查询由Elasticsearch集群来提供服务。
随着开源分布式数据库的出现,并经过多年的生产实践,可以采用一些开源分布式数据库产品,如TiDB、PolarDB-X和CockroachDB等,替换上面的读写分离、分库分表和查询分离技术方案,简化技术栈。
Spring Cloud Alibaba微服务实战
SQL性能优化点滴:
SQL 性能优化是数据库应用开发中非常重要的一环,它可以提高数据库的处理效率和响应速度,让应用更加快速、可靠和稳定。下面是一些常见的 SQL 性能优化技巧:
索引优化:索引是加速 SQL 查询的最常用的方式之
一。优化索引可以包括选择合适的索引类型、优化索引顺序、删除不必要的索引等。
查询语句优化:SQL 查询语句的编写对查询性能影响很大。可以考虑优化 WHERE 子句、SELECT 子句、JOIN 子句等,减少查询的数据量、尽量避免使用通配符、避免在 WHERE 子句中使用函数等。
数据库表设计优化:优化数据库表设计可以包括优化表结构、选择合适的数据类型、减少冗余数据、规范化数据等,以提高查询效率和减少数据存储空间。
数据库连接优化:连接数据库的方式对性能也有很大的影响,可以通过选择连接池、减少连接数量等方式来优化数据库连接。
数据库服务器优化:数据库服务器的硬件和系统设置也会影响 SQL 查询性能。可以考虑优化内存、磁盘 IO、CPU 负载、网络带宽等方面,以提高数据库服务器的性能。
SQL 语句缓存优化:SQL 查询语句的缓存可以避免重复的查询语句对数据库的负担,可以通过合理配置缓存大小、缓存策略等方式来优化 SQL 语句缓存。
避免死锁和数据竞争:死锁和数据竞争也会影响 SQL 查询性能和数据的完整性。可以通过选择合适的事务隔离级别、优化事务处理方式等方式来避免死锁和数据竞争。
总之,SQL 性能优化需要结合具体应用场景和数据特点来进行,需要综合考虑索引、查询语句、表设计、连接方式、服务器性能等多个方面来进行优化,才能最大限度地提高 SQL 查询性能。
1 在搞清楚回表问题之前,先了解一下InnoDB索引分为:聚集索引和普通索引
2 需要对两类索引有基本认识,聚集索引的叶子节点存储行记录 ,普通索引的叶子节点存储主键值
3 知道什么场景会发生回表,先查找普通索引树提取到主键值,再到主键索引树查找到记录
4 回表查询会查询多次,那如何避免呢,要知道避免回表的方法
什么是回表查询_早安试言的博客-CSDN博客_回表查询
数据库管理利器RazorSQL,我的最爱!
一个直观、直接的 SQL 数据库查询工具、浏览器和编辑器,支持所有主要数据库,例如 MySQL、Oracle、SQL Server 或 Sysbase,仅举几例:
1、使用不同的数据库并执行从简单的 SELECT 语句到复杂的过程的 SQL 脚本,RazorSQL 被证明是一种直观而稳定的解决方案,专为需要创建、更改、描述、执行和删除数据库对象(例如表、视图)的数据库管理员而设计、索引、存储过程和函数。
2、无论您选择使用哪种数据库,无论是Oracle、MS SQL Server、MySQL、PostgreSQL、Firebird、Interbase、Apache Derby、Salesforce、SQL Azure、SQLite、MongoDB、Frontbase 还是 JavaDB,该应用程序都可以帮助您编辑 SQL 脚本,从多个表中收集信息,创建索引和视图。因为它将连接信息存储在“连接配置文件”中,您需要创建一个新配置文件。创建后,它可以用于连接到您想要的任何数据库。
3、建立连接后,左侧面板会显示所有已识别的数据,从而允许您按照自己的方式对其进行编辑。主窗口使您可以根据需要执行任意数量的 SQL 脚本,而控制台部分检索所有必要的数据。
此外,如果要将分隔文件、Excel 电子表格、固定宽度文件中的数据导入当前数据库,您可以使用主工具栏中的相应选项。
4、如果您想一次运行一个 SQL 查询,您可以选择“执行 SQL(一个语句)”选项,否则您可以访问其他功能,例如“执行 SQL - 提取所有行”或“执行 SQL(所有语句)”声明)”。
RazorSQL 的另一个重要特性是您可以比较来自多个表、视图或查询的数据,无论它们属于同一个数据库还是来自不同的数据库。通过访问“文件”菜单中的“比较工具”选项,您可以设置连接参数,选择您感兴趣的所有数据,然后进行比较。但是,此选项的缺点是您需要手动编写每个表的名称,并且由于它没有自动完成功能,也没有显示可以从中选择可用表的下拉列表,因此您需要付费写他们的名字时要注意。
5、通过访问“结果”菜单,您可以按照您想要的方式过滤和排序所有查询结果,编辑选定的单元格,以及轻松生成 INSERT、SELECT、UPDATE 和 DELETE 语句。
总而言之,RazorSQL 捆绑了可视化工具和有用的功能,可帮助您管理多个数据库、执行 SQL 语句并将数据导出到 XML、HTML 和 Excel 电子表格。
【更加便捷的地图服务-WebGIS】
WebGIS是技术应用于GIS(地理信息系统)开发的产物。GIS通过WWW功能得以扩展,真正成为一种大众使用的地图信息工具。从WWW的任意一个节点,用户可以浏览WebGIS站点中的空间数据、制作专题图,以及进行各种空间检索和空间分析,从而使GIS进入千家万户。
WebGIS可以简单定义为在Web上的GIS(地理信息系统)。当前/正在以惊人的速度迅速膨胀发展,在这样的形势下,如何将GIS引入/世界,使GIS充分利用和发挥互联网的优势,就成为GIS发展研究的一个重要技术。与传统的基于桌面或局域网的GIS相比,WebGIS具有以下的优点:
1.更广泛的访问范围
客户可以同时访问多个位于不同地方的服务器上的最新数据,而这一 /所特有的优势大大方便了GIS的数据管理,使分布式的多数据源的数据管理和合成更易于实现。
2.平台独立性
无论服务器 /客户机是何种机器,无论WebGIS服务器端使用何种GIS软件,由于使用了通用的Web浏览器,用户就可以透明地访问WebGIS数据,在本机或某个服务器上进行分布式部件的动态组合和空间数据的协同处理与分析,实现远程异构数据的共享。
3.可以大规模降低系统成本
普通 GIS在每个客户端都要配备昂贵的专业GIS软件,而用户使用的经常只是一些最基本的功能,这实际上造成了极大的浪费。WebGIS在客户端通常只需使用Web浏览器(有时还要加一些插件),其软件成本与全套专业GIS相比明显要节省得多。另外,由于客户端的简单性而节省的维护费用也不容忽视。
4.更简单的操作
要广泛推广 GIS,使GIS系统为广大的普通用户所接受,而不仅仅局限于少数受过专业培训的专业用户,就要降低对系统操作的要求。通用的Web浏览器无疑是降低操作复杂度的最好选择。
5.平衡高效的计算负载
传统的 GIS大都使用文件服务器结构的处理方式,其处理能力完全依赖于客户端,效率较低。而当今一些高级的WebGIS能充分利用网络资源,将基础性、全局性的处理交由服务器执行,而对数据量较小的简单操作则由客户端直接完成。这种计算模式能灵活高效地寻求计算负荷和网络流量负载在服务器端和客户端的合理分配,是一种较理想的优化模式。
为追随 WebGIS这一发展趋势,近期各大GIS软件厂家纷纷推出通过Web提供交互式成图功能的工具。ESRI公司最近推出了MapServerforArcView,而MapInfo也已增强和重新打包了它的Web服务器,称之为MapXtreme。在应用系统方面,国外著名的GIS软件公司的网站上已大都使用了WebGIS,国内如中国经济信息网公众信息部与国家信息中心数据库部联合开发的《中经网地图信息服务系统》,可为用户提供地理位置检索、信息分类查询和模糊检索等服务内容。
动态(dynamic)的WebGIS
这类 GIS系统是目前WebGIS实现的主要形式。实际上,最早的WebGIS出现时,是简单地将固定的地图图片链接到网页上,对于所有的用户查询,系统返回的是预先制成的相同的地形文件和数据。这种方案的局限性是显而易见的,随后的改进方案是在服务器端使CGI(CommonGatewayInterface)技术,由CGI程序负责处理用户输入,将用户的操作指令传递到运行在后台的GIS服务器,然后将服务器返回的结果反馈给用户。这种动态操纵空间数据库生成查询结果图形和数据的方式,我们称为动态的WebGIS。其中CGI可以用任何一种能运行在服务器上的语言如
C、C++,VB甚至是Perl、ShellScript等解释型语言写成。近期许多网站开始用ASP(ActiveServerPages)来代替CGI,它们的原理不同,但所起的作用是一致的,都起到了管理和传递输入输出的作用。动态的WebGIS的特点是:
(1)基本不用改变原有的GIS服务器端的调用函数,构造Web时较为简便迅速,开发效率高。
(2)针对不同的用户操作完成相应的响应,能完成GIS的大多数功能。
(3)对服务器要求较高。由于用户发出的所有指令最终都由GISServer来完成,用户端实际上是起了一个图形终端的作用,致使服务器端负担过重,要求服务器端的硬件速度快,内存容量大。当用户数量多时,容易在服务器端形成瓶颈,进而影响整个系统的效率。
(4)由于回传用户的地图是在服务器生成的图像数据,因此网络数据流量较大,在慢速的网络上用户的等待现象十分突出。
自己用Delphi开发的DBA工具用着太爽了,导出表结构,查看整个数据库对象,表空间大小以及实时监控和优化等等。
这个Delphi开发的数据库管理工具,虽然没sqlserver的企业管理器那么强,但有些功能还是很方便的,对于分析一个数据库非常使用。
1、数据库系统维护,其维护服务内容主要包括:
(1)数据库实例状态检查
(2)数据库表空间使用情况
(3)监控查看数据库的连接情况
(4)表空间使用情况和性能检查
(5)数据库告警日志检查分析
(6)数据库备份检查
2、中间件维护,中间件软件维护服务内容主要包括:
(1)数据维护
(2)数据备份
(3)系统日常维护
(4)中间件升级而对应用软件进行适应性更新与调测服务
(5)中间件维护操作手册及应急流程更新
3、应用系统的日常维护
维护要求为: 通过对应用系统的维护, 分析用户的不断更新的需求,分析应用系统对服务平台性能的要求, 提出系统优化扩容解决方案,保障应用系统的处理服务性能。
主要维护内容包括:
(1)业务数据维护;
(2)业务数据备份;
(3)业务系统日常维护;
(4)软件更新服务;
(5)对业务管理系统健康状态检查与分析报告;
(6)对系统用户信息进行维护和修改, 添加系统用户、 更改系统用户信息、权限,负责系统中管理人员、操作人员、监督人员名单的调整,以及数据同步。
2022年StackOverflow调查报告出炉,最受欢迎数据库为PostgreSQL。
在Redis成为最受欢迎的数据库5年后,PostgreSQL成为最受欢迎的数据库。
报告地址:网页链接
为什么PostgreSQL如此受欢迎,因为它一个数据库能满足程序员几乎所有的用例需求:
1、OLTP (Online Transaction Processing,在线事务处理)
我们可以使用PostgreSQL进行增删查改操作。
2、OLAP (Online Analytical Processing,在线分析处理)
我们可以使用PostgreSQL进行分析处理。PostgreSQL基于HTAP(混合事务/分析处理)架构,因此它可以很好地处理OLTP和OLAP。
3、FDW (Foreign Data Wrapper,外部数据包装器)
FDW是PostgreSQL中的一个扩展,它允许我们从一个数据库访问另一个数据库中的表或schema。
4、Streaming(流式处理)
PipelineDB是高性能时序聚合的PostgreSQL扩展,旨在支持实时报告和分析应用程序。
5、Geospatial(空间数据库)
PostGIS是PostgreSQL对象关系数据库的空间数据库扩展器。它增加了对地理对象的支持,允许在SQL中进行位置查询。
6、Time Series(时间序列)
Timescale是PostgreSQL的为时间序列和分析扩展。例如,开发人员可以将源源不断的财务数据和其他商业数据结合起来,构建新的应用程序,并发现独特的见解。
7、Distributed Tables
CitusData通过分发数据和查询来扩展PostgreSQL。
MongoDB 是通用型数据库,除了创建、读取、更新和删除数据外,它还提供了数据库管理系统的常见功能和许多其他独特的功能,举例如下。
MongoDB 支持通用的二级索引,并提供唯一索引、复合索引、地理空间索引及全文索引功能。此外,它还支持在不同层次结构(如嵌套文档和数组)上建立二级索引,让开发人员能够以最适合应用程序的方式充分利用其建模能力。
MongoDB 提供了一种基于数据处理管道的聚合框架。用户可以通过在服务器端使用一系列相对简单的处理阶段,来充分利用数据库优化以构建复杂的分析引擎。
MongoDB 支持生命周期有限(TTL)集合,适用于保存将在特定时间过期的数据,比如会话和固定大小的集合,以及用于保存最近的数据(日志)。MongoDB 还支持部分索引,可以仅对符合某个条件的文档创建索引,以提高效率并减少所需的存储空间。
针对大文件及文件元数据的存储,MongoDB 使用了一种非常易用的协议。
MongoDB 并不具备关系数据库中的一些常见功能,特别是复杂的连接操作。MongoDB 通过使用 3.2 版本引入的 $lookup 聚合运算符以非常有限的方式支持连接操作。在 3.6 版本中,可以使用多个连接条件以及非关联子查询来实现更复杂的连接。MongoDB 的这种处理是出于架构上的考虑,以便获得更好的可扩展性,因为这些特性在分布式系统中很难高效地实现。