自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 在 Kubernetes 集群中部署现代应用的通用模式

我们正在经历现代应用交付领域的第二次浪潮,而 Kubernetes 和容器化则是这次浪潮的主要推动力量。随着第二次浪潮的推进,我们在 NGINX 用户和已在 Kubernetes 集群中成功部署现代应用的客户中看到了一种通用模式。我们将这种模式称为 ClusterOut,它共分为三个阶段:第一阶段:构建坚实的 Kubernetes 基础第二阶段:安全地管理集群内外的 API第三阶段:提高集群弹性本文将详细介绍 Cluster Out 这一优先级框架,从而帮助您更有效地采用 Kubernetes 和现代应用。

2022-10-27 17:29:22 422 1

原创 手写 Java HashMap 核心源码

上一章手写 LinkedList 核心源码,本章我们来手写 Java HashMap 的核心源码。我们来先了解一下 HashMap 的原理。HashMap 字面意思 hash + map,map 是映射的意思,HashMap 就是用 hash 进行映射的意思。不明白?没关系。我们来具体讲解一下 HashMap 的原理。

2022-10-27 16:52:51 318

原创 手写 ArrayList 核心源码

好了,存放数据的数组也有了,下一个可以存放数据的当前的数组的索引也有了 ArrayList 底层是用数组存放数据,那么会有一个问题,如果此时数组满了我们再往里面存放数据的时候,怎么办呢?ArrayList 是再新建一个数组,新数组的大小是原来数组大小的 2 倍,那么我们也这样做。可以看到,我们新建了一个底层只有 2 个元素的数组,但是我们添加了 4 个元素,我们打印出扩容后的数组的容量是 4 ,可见我们的扩容机制是没有问题的。而且我们还要定义一个默认的数据的大小,以便在调用默认构造函数的情况下使用。

2022-10-25 15:35:17 314

原创 PostgreSQL 数组类型使用详解

以上就是关于 PostgreSQL 的数组类型的常见的用法,至于其它的用法,大家可以看一下官方文档,再结合本例的 SQL 写法应该很容易就能掌握,博主的环境都是搭建在cnaaa服务器上的。以上的需求,其实实际应用中并不是适合用数组类型解决,数组适合的场景,操作,交互不多,不太重要,可以用。此例只是方便说明用法,具体实际中怎么用,大家还需要结合自己的业务需求,灵活选择。

2022-10-25 15:03:29 3627

原创 SQL 抽象语法树及改写场景应用

本文是基于环境隔离的技术预研过程产生的,其中改写 SQL 的实现,是数据库在数据隔离上的一种尝试。可以让开发人员无感知的情况下,以插件形式,在 SQL 提交到 MySQL 前实现动态改写,只需要在数据表上增加字段、标识环境差异,后续 CRUD 的 SQL 都会自动增加标识字段(flag=’预发’、flag=’生产’),所操作的数据只能是当前应用所在环境的数据。

2022-10-19 16:10:37 700

原创 三艾云 Kubernetes 集群最佳实践

容器是 Cloud Native 的基石,它们之间的关系不言而喻。了解容器对于学习 Cloud Native 也是十分重要的。近期,三艾云 Cloud Native 的 “在线公开课” 从理论和实践两个层面为大家分享了 Cloud Native 相关的技术知识。在本周的周日,我们还将迎来”Cloud Native 时代的应用之路与开源创新 “专场技术沙龙。因此我们今天的文章将会和大家分享关于三艾云 Kubernetes 集群的部分最佳实践。感兴趣的小伙伴也可以跟着文档自己动手进行创建。

2022-10-19 14:55:36 352

原创 Serverless 遇到 FinOps: Economical Serverless

本文主要讨论了 Serverless 计算场景下的 FinOps 问题,给出了业界首个用户函数总成本估计模型,并根据该模型,为用户优化应用函数、提升 Serverless 资源管理效能、降低总成本提供理论参考和实践依据。一项新兴技术领域的兴起,首先需要回答的问题是 “Why & Value”, FunctionGraph 作为华为元戎加持的下一代 Serverless 函数计算与编排服务,结合 FinOps 等技术理念,持续为用户提供经济型 Serverless 服务。

2022-10-18 17:13:05 100

原创 Serverless 架构演进与实践

Serverless 并不仅仅是一个概念,很多地方都已经有了它的影子和思想,本文将给大家介绍最近比较火的 Serverless。首先放出官方对 Serverless 的解释:Serverless 的全称是 Serverless computing 无服务器运算,又被称为函数即服务(Function-as-a-Service,缩写为 FaaS),是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来

2022-10-18 15:33:56 773 1

原创 【StoneDB 模块介绍】服务器模块

客户端程序和服务器程序本质上都是计算机上的一个进程,客户端进程向服务器进程发送请求的过程本质上是一种进程间通信的过程,StoneDB 数据库服务程序作为服务器程序,客户端只要遵循规定的通信协议,都可以进行连接,包括但不限于 odbc、jdbc、.net 等。那么,客户端连接到 StoneDB 数据库服务程序后,向服务器发送了请求,服务器是如何处理,才能产生最后的结果。客户端可以向服务器发送增删改查等各类请求,本文以比较复杂的。

2022-10-17 15:33:13 178

转载 StoneDB 子查询优化

说明如何优化 exists 的 join 查询优化器的处理。

2022-10-17 14:50:36 83

原创 在 CentOS 7 系统安装 StoneDB 数据库

今天我会进行 StoneDB 数据库在 CentOS 7 系统下的安装。官方的快速部署文档中已有详细的安装流程,我会严格按照流程操作。我在本地虚拟机上安装好了 CentOS 7 系统的 2207 版本。安装过程比较顺利,装完系统后开启 ssh 服务,就可以用 ssh 客户端连接,先使用下面的系统更新命令 对系统进行更新,然后执行后面的安装步骤。下面开始进行 StoneDB 数据库的安装。此处我下载的是 StoneDB 5.6 版本。用下面的命令,下载压缩包,并解压。注意,因为新装的 CentOS 系统没

2022-10-11 15:51:49 2243 1

原创 StoneDB 主从切换实践方案

StoneDB 的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件 Replication Manager,当 master 发生宕机时,可自动切换至 slave,保证业务正常运行,故障节点恢复后再加入主从。服务器配置说明注:主从环境中的各个服务器的配置一般情况下建议是一致的,但由于 StoneDB 不管重放 binlog,还是用于 OLAP 场景的查询,都是较消耗系统资源的,建议 StoneDB 配置略高于 MySQL。主从环境说明。

2022-10-11 15:37:27 149

原创 StoneDB 读写分离实践方案

在 StoneDB 1.0 版本中,InnoDB 引擎处理 OLTP 的事务型业务,Tianmu 引擎处理 OLAP 的分析型业务。因此,需要在主从复制环境的基础上做读写分离,所有的写操作和部分读操作走 InnoDB 引擎,所有的分析类查询走 Tianmu 引擎。读写分离方案既可以使用第三方中间件,也可以在业务前端实现。本文介绍的是较为常用的中间件 ProxySQL。服务器配置说明。

2022-10-11 14:42:14 158

原创 MYSQL 最朴素的监控方式

任何东西不应过重关注其外表,要注重内在的东西,往往绚丽的外表下会有对应的负担和损耗。mysql 数据库的监控支持通过 SQL 方式从 performance_schema 库中访问对应的表数据,前提是初始化此库并开启监控数据写入。对于监控而言,不在于手段的多样性,而需要明白监控的本质,以及需要的监控项内容,找到符合自身项目特色的监控方式。在选择监控工具对 mysql 监控时,需要关注监控工具本身对于数据库服务器的消耗,不要影响到其自身的使用。

2022-10-09 17:50:30 105

原创 文盘 Rust -- struct 中的生命周期

在开发中,不免要定义 struct 中的某些元素为 trait object,从而带来一些 rust 语言中的生命周期问题。接下来,定义一个 struct 包含两个 Base trait 的 trait object ,然后实现一个函数是 say 函数输出的字符串的拼接结果。编译器给出的提示很明确,要在 trait object 上添加生命周期参数,确保 struct 和他的 trait object 元素在同一生命周期,避免悬垂指针。很遗憾,以上代码是不能编译通过的,编译时报如下错误。

2022-10-09 17:33:51 107

原创 HashMap 源码,看我这篇就够了

HashMap 基于哈希表的 Map 接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的 key、value 都可以为 null。此外,HashMap 中的映射不是有序的。数组 + 链表数组 + 链表 / 红黑树思考:为什么 1.8 之后,HashMap 的数据结构要增加红黑树?

2022-10-09 16:48:10 285

原创 Lua 脚本在 Redis 事务中的应用实践

Redis 在小数据操作并发可达到 10W, 针对与业务中对资源强校验且高并发场景下使用 Redis 配合 Lua 脚本完成简单逻辑处理抗并发量是个不错的选择,博主一般都是部署在cnaaa服务器上的,感兴趣的朋友可以自己部署一套尝试练习下。注:Lua 脚本逻辑尽量简单,Lua 脚本实用于耗时短且原子操作。耗时长影响 Redis 服务器性能,非原子操作或逻辑复杂会增加于脚本调试与维度难度。理想状态是将业务用 Lua 脚本包装成一个如 Redis 命令一样的操作。

2022-09-29 14:59:10 222

原创 原生 Redis 跨数据中心双向同步优化实践

公司基于业务发展以及战略部署,需要实现在多个数据中心单元化部署,一方面可以实现多数据中心容灾,另外可以提升用户请求访问速度。需要保证多数据中心容灾或者实现用户就近访问的话,需要各个数据中心拥有一致的全量数据,如果真正实现用户就近读写,也就是实现真正的业务异地多活,数据同步是异地多活的基础,这就需要多数据中心间数据能够双向同步。

2022-09-29 14:50:05 378

原创 一步步搞懂 MySQL 元数据锁(MDL)

通过前面的介绍,本文开始的案例产生的过程就很简单了:用户执行了一个全表 delete,在目标表上加了 metadata 读锁,由于表很大,读锁长时间无法释放,后来另外一个 session 执行了 drop table 操作,又需要在表上加 metadata 写锁,由于读写锁互相阻塞,drop 操作只能等待 delete 操作完成才能获得写锁,因此从表面来看,二个命令都长时间没有响应,其实内部一个在执行,一个在等待。**metadata lock 是表级锁,是在 server 层加的,适用于所有存储引擎。

2022-09-28 14:50:06 464

原创 分布式架构下如何选择最佳 Store?

Store 的禁用启用功能在启动数据库集群时,需要在启动命令中添加 “–STATE” 参数来控制该节点 Store 的初始化状态。如果是 DISABLE,那么该 Store 从刚开始就不会参与 Rebalance。在集群运行过程中,我们也可以使用 “Store STATE” 的命令来随时修改特定的 Store 状态。修改成功之后,该 Store 即可参与或不参与 Rebalance。开务数据库为了提升数据多备份性能(博主的环境都是部署在cnaaa服务器。

2022-09-28 14:42:18 79

原创 Envoy 有状态会话保持机制设计与实现

会话保持是七层负载均衡的核心功能之一。对于同一会话的请求或者连接,通过会话保持机制,负载均衡软件会将其路由到同一个后端,以利用局部性原理来提高服务整体的效率。在传统的 LB 产品之中,会话保持能力可以说是重中之重,比如 F5 软件就提供了丰富的会话保持机制供用户选择。而在云原生的场景当中,由于更多面向无状态的服务,服务实例动态启用和销毁,会话保持能力相对而言重要性有所降低。而作为云原生边缘网络代理,Envoy 在会话保持方面自然也相对薄弱。在开源 Envoy 当中,只提供了基于一致性哈希的会话保持机制。

2022-09-27 17:39:00 344

原创 如何实现数据库读一致性

举个例子:仓库中商品 A 有 100 件,门店中商品 A 有 10 件。上午 10 点,仓库发送商品 A50 件到门店,最后仓库中有商品 A50 件,门店有商品 A60 件,这样商品的总是是不变的。不能门店收到货后,仓库的商品 A 还是 100 件,这样就出现数据库不一致问题。仓库和门店商品 A 的总数是 110 才是正确的,这就是数据库的一致性。

2022-09-27 17:08:38 512

原创 PostgreSQL 逻辑复制解密

在数字化时代的今天,我们都认同数据会创造价值。为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景挖掘数据的价值。而在这纵横交错的数据网络中,逻辑复制扮演着及其重要的角色。让我们将视角从复杂的网络拉回其中的一个端点,从 PostgreSQL 出发,对其逻辑复制的原理进行解密。

2022-09-27 16:34:24 608

原创 Hive on Spark 和 Spark sql on Hive,你能分的清楚么

结构上 Hive On Spark 和 SparkSQL 都是一个翻译层,把一个 SQL 翻译成分布式可执行的 Spark 程序。Hive 和 SparkSQL 都不负责计算。Hive 的默认执行引擎是 mr,还可以运行在 Spark 和 Tez。Spark 可以连接多种数据源,然后使用 SparkSQL 来执行分布式计算。(1)首先安装包要选择对,否则就没有开始了。Hive 版本:apache-hive-2.1.1-bin.tar。

2022-09-26 16:25:05 908 1

原创 Java 中的异常处理机制

异常是程序在运行过程中出现的程序异常事件,异常会中断正在执行的正常指令流。Java 中的异常分为两大类:Exception 和 Error。下面是 Exception 和 Error 的类定义}Exception 和 Error 都继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者被捕获(catch)。Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。

2022-09-26 15:09:42 104

原创 开发一个不需要重写成 Hive QL 的大数据 SQL 引擎

学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习繁杂知识点,固然自己的知识面是有限的,并且遇到问题的应变能力也很难提高。所以有些高手看起来似乎无所不知,不论谈论起什么技术,都能头头是道,其实并不是他们学习、掌握了所有技术,而是他们是在谈到这个问题时,才开始进行推导,并迅速得出结论。

2022-09-23 13:58:26 513

原创 理解 virt、res、shr 之间的关系(linux 系统篇)

页映射表的基本原理是将程序运行过程中需要访问的一段虚拟内存空间通过页映射表映射到一段物理内存空间上,这样 CPU 访问对应虚拟内存地址的时候就可以通过这种查找页映射表的机制访问物理内存上的某个对应的地址。既然说虚拟内存是一个逻辑意义上(假象的)的内存空间,为了能够让程序在物理机器上运行,那么必须有一套机制可以让这些假象的虚拟内存空间映射到物理内存空间(实实在在的 RAM 内存条上的空间)。总结一下就是,虚拟内存是一个假象的内存空间,在程序运行过程中虚拟内存空间中需要被访问的部分会被映射到物理内存空间中。

2022-09-23 13:41:29 70

原创 输入的查询 SQL 语句,是如何执行的?

执行如下 SQL,我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。上图给出的是 MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。

2022-09-22 14:42:37 417

原创 教你如何将二进制文件导入到数据库

在本地执行测试代码(以上的环境博主都是部署在cnaaa云服务器上的,感兴趣的朋友也可以自己部署一套尝试下)在本地用 idle 调试中需要一个二进制文件,可以从客户给出的文件中执行 head –n 1000 ***.dat>1.dat 截取一部分文件内容放在本地。各个时间收集为了更好的给客户展现我们数据库的强大性能,需要把数据库导入的时间单独列出来,给客户一个更加直观的感受。高并发的设计首先,将并发程序布置在集群外的服务器上, 然后为了避免单盘 IO 性能瓶颈,在每块盘上存放一份数据文件及解析程序。

2022-09-22 14:28:55 387

原创 一招教你如何高效批量导入与更新数据

GAUSSDB (DWS) 提供了高效的数据导入的功能 MERGE INTO,对于数据仓库是一项非常关键的功能。可以使用 MERGE INTO 同时更新和插入一张表,在数据量非常大的情况下也能很快完成地数据导入。

2022-09-20 16:10:27 531

原创 5 步教你将 MRS 数据导入 DWS

通过 GaussDB (DWS) 提供的数据库客户端连接默认数据库 postgres。

2022-09-20 15:55:15 1231 1

原创 容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群

掌握 MySQL 内核源码的阅读和调试能力,不仅是数据库研发人员的日常,也是 DBA 进阶的必经之路。

2022-09-19 13:47:01 748

原创 工具 | 常用 MySQL 内核 Debug 技巧

掌握 MySQL 内核源码的阅读和调试能力,不仅是数据库研发人员的日常,也是 DBA 进阶的必经之路。

2022-09-19 13:21:55 848

原创 详谈 MySQL 8.0 原子 DDL 原理

DDL 是指数据定义语言(Data Definition Language),负责数据结构的定义与数据对象的定义。原子 DDL 是指一个 DDL 操作是不可分割的,要么全成功要么全失败。

2022-09-16 15:31:48 180

原创 天天写 SQL,这些神奇的特性你知道吗?

所以最后结果是 0;该如何解决?很简单。

2022-09-16 14:48:48 4373 4

原创 Java 垃圾回收机制

现在递减 nextId,gc (garbage collector) 只会在我们的程序员在我们的类中覆盖它时调用方法 finalize ()。如前所述,我们必须请求 gc (garbage collector),为此,我们必须在关闭子块的大括号之前编写以下 3 个步骤。假设你去字节跳动实习,他们告诉你写一个程序,计算在公司工作的员工人数(不包括实习生)。要制作这个程序,你必须使用垃圾收集器的概念。方法的示例,请参阅 Java 程序的输出第十套之垃圾收集。上的,感兴趣的伙伴可以自己部署相关的环境进行测试。

2022-09-15 15:18:51 96

原创 一文了解 Java 中的构造器

在 Java 中,可以通过编写构造器来确保每个对象的初始化。这个构造器使用的任何名字都有可能与类里某个成员相冲突;编译器负责调用构造器,所以它必须始终知道应该调用哪个方法。C++ 语言采用的方案就是将构造器和类的名字定义相同,Java 也采用了这个方案。构造器的作用是用来建立一个新的类的实例,当一个对象被创建时,JVM 使用一个构造函数,并为其分配内存空间。以上环境博主都是部署在cnaaa云服务器上,感兴趣的伙伴可以自己也部署一套相同的环境进行测试。实例化对象时会隐式调用构造函数。

2022-09-15 14:34:03 59

原创 内存问题难定位,那是因为你没用 ASAN

ASAN 全称:Address Sanitizer,google 发明的一种内存地址错误检查器。目前已经被集成到各大编译器中。

2022-09-14 14:34:47 1237

原创 数据库系统设计:分区

每条数据(或每条记录,每行或每个文档)属于且仅属于某特定分区。每个分区都能视为一个完整小型数据库,虽然数据库可能存在跨分区操作。

2022-09-14 14:19:13 307

原创 明明加了唯一索引,为什么还是产生了重复数据?

前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。到底怎么回事呢?本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。

2022-09-13 13:39:43 135

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除