暂无个人介绍
最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。 一些可能的实现 刚才提到过,实现秒杀的关键点是控制线程对资源的争抢,根据基本的线程知识,可以不加思索的想到下面的一些方法: 秒杀在技术层面的抽象应该就是一个方法,在这个方法里可能的操作是将商品库存-1,将商品加入用户的购物车等等,在不考
摘要:本文简述了一种在No-SQL数据库中实现ACID事务性的方法,这种方法只需要底层No-SQL DB实现MGET和MUPDATE两个原语就可以保证完整的ACID事务性,在API层,则将复杂的事务性的读写操作归纳为WALK和MUPDATE两个原语,方便使用。 题图是Redis的ASCII Logo,Redis服务器在启动的时候,会把这个Logo连带着一些运行信息打印到服务的日志里。因为这个功能,一名愤怒的用户在Github上提了一个issue,强烈要求取消这个功能,因为在他的syslog转义了换行符,然后这条日志就变成了这个样子: Aug 14 09:40:07 ww3-ukc redi
避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列。请求多余的行和列会消耗MySql服务器的CPU和内存资源,并增加网络开销。 例如在处理分页时,应该使用LIMIT限制MySql只返回一页的数据,而不是向应用程序返回全部数据后,再由应用程序过滤不需要的行。 当一行数据被多次使用时可以考虑将数据行缓存起来,避免每次使用都要到MySql查询。 避免使用SELECT *这种方式进行查询,应该只返回需要的列。 查询数据的方式 查询数据的方式有全表扫描、索引扫描、范围扫描、唯一索引查询、常数引用等。这些查询方式,速度从慢到快,扫描的行数也是从多到少。可以通过EXPLAIN语句中的ty
1.背景 前段时间,由于运维同事的一次误操作,清空了内网核心数据库,导致了公司内部管理系统长时间不可用,大量知识库内容由于没有备份险些丢失。 结合这两天微盟的删库跑路事件,我们可以看到,数据库的备份与恢复显得尤为重要。 本文将对此次内网数据恢复过程做一些整理,介绍删库后的抢救方案。 同时,引发对数据库稳定性的思考。 2.数据抢修 这份内网数据事先没有特意备份,所以一开始认为需要从磁盘恢复数据了。所以紧急联系了数据恢复公司,希望过来恢复磁盘数据。 这里需要注意,数据恢复公司建议马上关机,避免磁盘数据被覆盖。 联系数据恢复公司的同时,运维同事在内网找到了几个残缺的备份文件,包括去年
PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。 UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。 一个UV可以用很多PV,一个PV也只能对应一个IP 没有这些数据的支持,意味着你不知道产品的发展情况,用户获取成本,UV,PV,注册转化率;没有这些数据做参考,你不会知道接下来提供什么建议给领导采纳,也推测不出领导为啥烦忧,那么就么有任何表现的机会。 举两个UV计算的场景: 1. 实时计算当天零点起,到当前时间的uv。 2. 实时计算当天每个小时的UV。0点
写这篇文章的原因是前两天星球球友去面试,面试管问了一下,Spark 分析ES的数据,生成的RDD分区数跟什么有关系呢? 稍微猜测一下就能想到跟分片数有关,但是具体是什么关系呢? 可想的具体关系可能是以下两种: 1).就像KafkaRDD的分区与kafka topic分区数的关系一样,一对一。 2).ES支持游标查询,那么是不是也可以对比较大ES 索引的分片进行拆分成多个RDD分区呢? 那么下面浪尖带着大家翻一下源码看看具体情况。
PageRank估计是很多面试场合上镜率比较高的吧,面试Spark的时候会被问到,最近flink热,估计也会被问到吧,浪尖就在这里帮大家解决这个疑难杂症。 算法常见的原题是: pagerank的算法会维护两个数据集:一个由(pageID,linkList)的元素组成,包含每个页面的相邻页面的列表;另一个由(pageID,rank)元素组成,包含每个页面的当前排序值。它按如下步骤进行计算。 将每个页面的排序值初始化为1.0。 在每次迭代中,对页面p,向其每个相邻页面(有直接链接的页面)发送一个值为rank(p)/numNeighbors(p)的贡献值。 将每个页面的排序值设为0.15 +
Parquet是一种列式存储格式,很多种处理引擎都支持这种存储格式,也是sparksql的默认存储格式。Spark SQL支持灵活的读和写Parquet文件,并且对parquet文件的schema可以自动解析。当Spark SQL需要写成Parquet文件时,处于兼容的原因所有的列都被自动转化为了nullable。 1读写Parquet文件 // Encoders for most common types are automatically provided by importing spark.implicits._ import spark.implicits._ val peop
1.前言 DistributedCache是hadoop框架提供的一种机制,可以将job指定的文件,在job执行前,先行分发到task执行的机器上,并有相关机制对cache文件进行管理。 DistributedCache 可将具体应用相关的、大尺寸的、只读的文件有效地分布放置。DistributedCache 是Map/Reduce框架提供的功能,能够缓存应用程序所需的文件 (包括文本,档案文件,jar文件等)。 Map-Redcue框架在作业所有任务执行之前会把必要的文件拷贝到slave节点上。 它运行高效是因为每个作业的文件只拷贝一次并且为那些没有文档的slave节点缓存文档。 Dis
每当我对Docker提出批判时,都会收到很多愤懑的回复。我曾于6个月前撰写一篇文章,即《 为什么有人会选择Docker而非大型二进制文件?》,并终于在Hacker News上众多愤慨的批评声中看到了一些明智的评论。因而,今天的这篇文章主要是进一步阐述Docker的设计缺陷并回应未来可能将会面临的批判。 相比HFT Guy的经历而言,我想我已经足够幸运了。HFT Guy曾满腔怒火地表示,由于在金融公司的产品生产阶段使用了Docker而导致失败,想来其必然为此付出了不小代价。原文引用如下: 我收到了一份十分无礼的邮件,发件人明显是业余社区中的一员。这位仁兄在邮件中愤怒地表示:“白痴才会在Ubu
容器化和AI是目前开发的大趋势。理想情况下,容器化可以将环境无缝迁移,将配置环境的成本无限降低:但是在容器中配置CUDA并运行TensorFlow一向是个难题。对于初学者以及没有深度学习工作站的用户,AWS和Azure推出了带独立显卡的云服务:但是按需实例价格不便宜,竞价式实例价格公道然而虚拟机不能重启,导致不能按需挂载硬盘并保存工作状态,用户需要编写大量代码时刻对虚拟机进行监控并对结果进行异地保存。Deep Systems对这个问题进行了研究并给出了很好的建议。 用户首先需要配置 CUDA:Deep Systems推荐使用runtime 安装,以免在升级后污染依赖环境。 安装 Dock
堆(Heap)大小 默认情况下,在64位的服务器中,JVM通常将最大堆大小设定为物理内存的1/4。而在容器化环境中,这确实没有什么意义,因为你通常拥有很多可以运行多个JVM的大内存的服务器。如果你在不同的容器中运行10个JVM,并且每个JVM最终都使用了1/4的RAM,那么你将面临过度使用机器RAM的窘境,并且有可能最终导致虚拟内存耗尽——结局就是用户将离你而去。 这还会抵消容器的另一项重要优势,即构建及测试的容器镜像必然能够在生产环境中拥有同样的运行效果。在较小的物理主机上的镜像环境中,一个容器可以很容易地正常工作,但在生产环境较大的主机上可能会因为超出容器的任何内存限制而被内核杀死。
1. 前言 1.1 为什么要用 Docker ? 是否有这样的场景,你搞了一个项目,在本地开发时需要搭建环境,放到线上时也需要搭建环境,到公司想暗戳戳玩一下要搭建环境,不搭还不行,因为你的环境依赖还挺多。这个时候如果有了Docker,只需要在机器上装个Docker,放上写好的Dickerfile,一行命令就自动完成这个事,方便又高效,岂不是很爽? 1.2 准备 接下来,本文介绍如何搭建一个PHP的开发环境,将用 zPhal-dockerfiles 做为例子,这是我为我的博客系统准备的一套Dockerfile。 现在不管是windows,mac还是linux,docker都可以很好支持,包
架构师小组交流会:每期选一个时下最热门的技术话题进行小组交流。 第一期主题:容器实践。Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化、可移植性是CI/CD,DevOps,微服务的重要实现技术。但目前技术还不够成熟,在生产实践中会遇到不少坑。本期参与小组交流的是国内较早采用 Docker 实践的公司。 参与嘉宾:沪江架构师黄凯、滴滴架构师田智伟、蘑菇街架构师张振华、蘑菇街运维架构师向靖、七牛技术总监袁晓沛、扇贝技术总监丁彦
我blog上的老文,已经沉了,在专栏发一下。 在高性能并发服务器中,对于共享对象的读写是最常见的操作之一,比如全局配置类对象的并发读取和更新,以及更复杂的如copy on write btree、堆栈等的并发读写,最基本的操作都可以简化理解为通过全局共享的指针,并发读取和更新指针所指向对象的操作。 最简单的模型如下所示,一个包含了多个字段的结构体: struct GConf { int64_t a; int64_t b; int64_t c; }; 可以通过一个全局指针struct gConf *g_conf进行访问。有多个线程会同时读取或更新这个对象,要求任何时刻读取到的内容
Docker是云技术和IT技术的未来,这一点正在被越来越多的公司认识到,但是对于传统企业来说,如何将传统的应用迁移到Docker是一个迫切需要解决的问题。传统企业,尤其是国内的传统企业,IT建设普遍滞后,当大多数互联网公司都在大面积使用Docker的时候,传统企业还在为虚拟化、公有云[注]和敏捷开发挣扎。很多企业都在提工业4.0,但是信息化建设却没有提高到一定的高度。企业的信息化程度,很大程度上决定了企业的生产效率,而 Docker则从应用层面提出了非常好的解决方案。本文也将从迁移的角度来阐述如何在传统企业中使用Docker。 传统应用容器化迁移的思考 对于传统应用来说,使用和不使用Dock
Docker的火热,催生了人们对于其商业模式的探讨,虽然目前Docker还有很多有待完善之处,但这并不妨碍人们对于Docker的追捧,但我们也应理性地看到,Docker并不是万能药,对其商业模式的探讨,将有力促进Docker的健康发展。 Docker技术虽然刚问世3年,但其发展如火如荼,受到大量企业客户和个人开发者的追捧,作为一项开源技术,Docker有一点和Java很像,那就是它们都是标准。作为标准的企业级应用开发语言,绝大多数企业内部的业务应用都是用Java开发的,而Docker正在成为应用封装的标准,未来企业内部的业务应用大多会封装成Docker的形式。 标准化最大的好处是带
如果没有真正的自动化,你就无法充分发挥容器的潜力。这就是Kubernetes Operator越来越重要的原因。 Kubernetes的一个关键优势是,它使现代应用程序和基础设施带来的许多运维工作实现自动化。而Kubernetes Operator被认为是实现这一优势的重要手段。 什么是Kubernetes Operator? 让我们回顾一下,什么是Kubernetes Operator,并给出它们如何工作的示例。 “Operator是控制用户资源的Kubernetes API的客户端。”Nexient的DevOps主管Matthew Dresden说,“此功能通过监控事件而不编辑Ku
如果没有真正的自动化,你就无法充分发挥容器的潜力。这就是Kubernetes Operator越来越重要的原因。 Kubernetes的一个关键优势是,它使现代应用程序和基础设施带来的许多运维工作实现自动化。而Kubernetes Operator被认为是实现这一优势的重要手段。 什么是Kubernetes Operator? 让我们回顾一下,什么是Kubernetes Operator,并给出它们如何工作的示例。 “Operator是控制用户资源的Kubernetes API的客户端。”Nexient的DevOps主管Matthew Dresden说,“此功能通过监控事件而不编辑Ku
如果你听说过关于Helm 3的唯一一件事就是它删除了Tiller动态配置文件生成工具,那么你已经知道最重要的一点:该项目经历了一次重大的重写,以赶上Kubernetes的发展并消除长期的安全问题。 这是项目成熟的标志,也反映在其他关键开发中,如更好的补丁合并、对可用性(包括发布管理)的重大改进,以及对Helm 2 chart的明确支持生命周期。 微软的Helm主程序经理Bridget Kromhout表示,对于安全性和稳定性来说,这是一个很好的信号。 “Helm 3更简单,更安全,它可能不会吸人眼球,但这些功能足以让运维大规模系统的人高兴。" “一个项目删除大块代码,这是成熟的标志。”
一、PostgreSQL简介 1、什么是PostgreSQL PostgreSQL数据库是目前功能最强大的开源数据库,支持丰富的数据类型(如JSON何JSONB类型,数组类型)和自定义类型。而且它提供了丰富的接口,可以很容易地扩展它的功能,如可以在GiST框架下实现自己的索引类型等,它还支持使用C语言写自定义函数、触发器,也支持使用流行的语言写自定义函数,比如其中的PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python、PL/Tcl,等等。 2、PostgreSQL数据库的优势 PostgreSQL数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL
经常, 我们会被过快增长的数据库事务日志Transaction Log而困扰, 如果我们没有正确及时的处理, 可能会造成数据库交易无法进行, 服务器磁盘空间占光等问题. 在SQL Server的使用过程中, 我经常帮助用户和数据库的维护人员处理日志Transaction Log太大后造成的系统瘫痪的问题. 其实这个问题很容易避免. 今天我给大家分享下, 是什么造成了日志增长过大的问题. 和如何避免这种问题再次发生. 该文章的语句适用于SQL Server 2015 及其以后的版本 每一个数据库至少有两个文件: 一个是数据文件(Data file), 一个是事务日志文件(Transaction
触发器的简介: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。 触发器可以查询其他表,而且可以包含复杂的sql语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根
避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列。请求多余的行和列会消耗MySql服务器的CPU和内存资源,并增加网络开销。 例如在处理分页时,应该使用LIMIT限制MySql只返回一页的数据,而不是向应用程序返回全部数据后,再由应用程序过滤不需要的行。 当一行数据被多次使用时可以考虑将数据行缓存起来,避免每次使用都要到MySql查询。 避免使用SELECT *这种方式进行查询,应该只返回需要的列。 查询数据的方式 查询数据的方式有全表扫描、索引扫描、范围扫描、唯一索引查询、常数引用等。这些查询方式,速度从慢到快,扫描的行数也是从多到少。可以通过EXPLAIN语句中的ty
Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。 优点 1. Oracle 能在所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持。 2. Oracle 并行服务器通过使组结点共享同簇工作来扩展wi
网上关于sql优化的答案数不胜数,可是篇幅太长,看一下滚动条就没有要看下去的欲望,这里自己总结精简了一下,全文1200字,阅读需要5分钟,还有很多不足之处望大佬多多指点~ 字段设计 价格使用定点数decimal 小单位大数额避免出现小数 单表字段不宜过多(最多30) 尽可能使用 not null 关联表的设计 一对多(使用外键) 多对多(单独新建一张表将多对多拆分成两个一对多) 一对一(如商品的基本信息(item)和商品的详细信息(item_intro),通常使用相同的主键或者增加一个外键字段(item_id)) 范式
数据库的DDL语言, 就是关系型数据库的三大类语言中的一种, 数据定义语言(Data Definition Language), 主要是数据结构和数据库对象的定义. 有CREATE , ALTER, DROP 等语句组成. 工作中经常需要对数据对象变更进行监控, 可能存在以下的场景: 监控所有的变更, 并保留变更记录. 比如对某些表结构的变更可能需要对其他的数据库的的表进行同步变更. 可能某些View的改变需要同步修改默写Stored Procedure 存储过程. 某些变更需要同步修改相应的应用程序. 经过研究, 可以通过全局触发器和自定义的监控Stored Procedure来实现.
1.SQLSERVER 中GO的作用** go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go) BEGIN 和 END 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条 Transact-SQL 语句的语句块的任何地方,都可以使用 BEGIN 和 END 语句。
存储过程简介: 存储过程(Stored Procedure)是在大型数据库中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升 ------来源于百度百科 存储过程的种类: 1系统存储过程 以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。 2本地存储过程 用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。
什么是redis? Redis 本质上是一个 Key-Value 类型的内存数据库, 整个数据库加载在内存当中进行操作, 定期通过异步操作把数据库数据 flush 到硬盘上进行保存。 因为是纯内存操作, Redis 的性能非常出色, 每秒可以处理超过 10 万次读写操作, 是已知性能 最快的 Key-Value DB。 Redis 的出色之处不仅仅是性能, Redis 最大的魅力是支持保存多种数据结构, 此外单个 value 的最大限制是 1GB, 不像 memcached 只能保存 1MB 的数据, 因此 Redis 可以用 来实现很多有用的功能,比方说用他的 List 来做 FI
本文基于Mosh Hamedani 的SQL教学视频,传送门av71348135,视频中用到的sql执行文件在这里cfk3 。那么,我们就开始吧。(持续更新中) 1.The SELECT Statement 目标:查找sql_store数据库的顾客表,要求按顾客名的字典序输出顾客编号为1的顾客记录 USE sql_store; SELECT * FROM customers WHERE customer_id=1 ORDER BY first_name 注意:代码第1行末尾的分号不能丢,否则无法执行,还要留意SELECT,WHERE,ORDER BY的先后顺序。 2.The SELEC
很多小伙伴说,我在底层已经搬砖好几年了,要怎么才能晋升管理层?这个问题我也是感同身受,因为我也在底层工作了好多年了o(╥﹏╥)o为了给大家解答这个问题,我有幸邀请到了饿了么前总监来为我们做一些分享:我是如何完成从程序员到管理层的蜕变,大家欢迎! 本文稿对应的视频可以在我的B站(程序员良许)里看到,欢迎一键三连哦~
ISO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合(a persistent, named collection of descriptors),如果你之前对schema的定义疑惑不解,希望看了我的这篇文章会好一些,起码不会更差。 广义上 造成疑惑的另一个原因可能是由于schema这一术语具有如此广泛的含义,因为它在不同的环境下有不同的含义,schema一词源于希腊语skhēma,意思是形态(form),轮廓(figure),形状(shape)或方案(plan)。Schema在心理学中被用来描述组织信息类别及其之间关系的有组织的思维或行为模式。我们在设计一个数
本文介绍了如何使用 DM 来处理异常的 SQL 语句。 目前,TiDB 并不完全兼容所有的 MySQL 语法(详见 TiDB 已支持的 DDL 语句)。当使用 DM 从 MySQL 同步数据到 TiDB 时,如果 TiDB 不支持对应的 SQL 语句,可能会造成错误并中断同步任务。在这种情况下,DM 提供以下两种方式来恢复同步: 使用 dmctl 来手动跳过 (skip) 该 SQL 语句对应的 binlog event。 使用 dmctl 来手动指定其他 SQL 语句来替代 (replace) 该 SQL 语句对应的 binlog event,并向下游执行。 如果提前预知将要同步 T
本文以 Amazon Aurora MySQL 为例介绍如何使用 DM 从 MySQL 协议数据库迁移数据到 TiDB。 第 1 步:在 Aurora 集群中启用 binlog 假设有两个 Aurora 集群需要迁移数据到 TiDB,其集群信息如下,其中 Aurora-1 包含一个独立的读取器节点。 集群 终端节点 端口 角色 Aurora-1 pingcap-1.h8emfqdptyc4.us-east-2.rds.amazonaws.com 3306 写入器 Aurora-1 pingcap-1-us-east-2a.h8emfqdptyc4.us-east-2.rds.amazona
本文介绍了 Data Migration (DM) 的错误系统,以及各种错误信息的详细含义。 DM 错误系统 DM 1.0.0-GA 版本中引入了新的错误系统。该系统: 增加了错误码机制。 增加了 class、scope、level 等错误信息。 优化了错误描述内容、错误调用链信息和调用堆栈信息。 错误系统的详细设计和实现,可参阅 RFC 文档: Proposal: Improve Error System。 错误信息示例 以下是 DM 实际输出的一条错误信息。本文根据这条信息,对各个字段作详细说明。 [code=38008:class=dm-master:scope=internal
存储过程的定义: 1、存储过程是以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。 2、存储过程可由数据库提供安全保证,要想使用存储过程,需要有存储过程的所有者的授权,只有被授权的用户或创建者本身才能调用执行存储过程。 3、存储过程的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。 4、像其他高级语言的过程和函数一样,可以传递参数给存储过程,
本文档介绍 TiDB Data Migration (TiDB DM) 相关术语。 B Binlog 在 TiDB DM 中,Binlog 通常指 MySQL/MariaDB 生成的 binary log 文件,具体请参考 MySQL Binary Log 与 MariaDB Binary Log。 Binlog event MySQL/MariaDB 生成的 Binlog 文件中的数据变更信息,具体请参考 MySQL Binlog Event 与 MariaDB Binlog Event。 Binlog event filter 比 Black & white table list 更
DM 是否支持同步阿里 RDS 以及其他云数据库的数据? DM 仅支持解析标准版本的 MySQL/MariaDB 的 binlog,对于阿里云 RDS 以及其他云数据库没有进行过测试,如果确认其 binlog 为标准格式,则可以支持。 task 配置中的黑白名单的正则表达式是否支持非获取匹配(?!)? 目前不支持,DM 仅支持 golang 标准库的正则,可以通过 re2-syntax 了解 golang 支持的正则表达式。 如果在上游执行的一个 statement 包含多个 DDL 操作,DM 是否支持同步? DM 会尝试将包含多个 DDL 变更操作的单条语句拆分成只包含一个 DDL 操
本文介绍了如何使用 TiDB Lightning 快速恢复 Kubernetes 上的 TiDB 集群数据。 TiDB Lightning 包含两个组件:tidb-lightning 和 tikv-importer。在 Kubernetes 上,tikv-importer 位于单独的 Helm chart 内,被部署为一个副本数为 1 (replicas=1) 的 StatefulSet;tidb-lightning 位于单独的 Helm chart 内,被部署为一个 Job。 为了使用 TiDB Lightning 恢复数据,tikv-importer 和 tidb-lightning
滚动更新 TiDB 集群时,会按 PD、TiKV、TiDB 的顺序,串行删除 Pod,并创建新版本的 Pod,当新版本的 Pod 正常运行后,再处理下一个 Pod。 滚动升级过程会自动处理 PD、TiKV 的 Leader 迁移与 TiDB 的 DDL Owner 迁移。因此,在多节点的部署拓扑下(最小环境:PD * 3、TiKV * 3、TiDB * 2),滚动更新 TiKV、PD 不会影响业务正常运行。 对于有连接重试功能的客户端,滚动更新 TiDB 同样不会影响业务。对于无法进行重试的客户端,滚动更新 TiDB 则会导致连接到被关闭节点的数据库连接失效,造成部分业务请求失败。对于这类
本文主要描述了在 Kubernetes 上如何为 TiDB 集群的 MySQL 客户端开启 TLS。TiDB Operator 从 v1.1 开始已经支持为 Kubernetes 上 TiDB 集群开启 MySQL 客户端 TLS。开启步骤为: 为 TiDB Server 颁发一套 Server 端证书,为 MySQL Client 颁发一套 Client 端证书。并创建两个 Secret 对象,Secret 名字分别为:${cluster_name}-tidb-server-secret 和 ${cluster_name}-tidb-client-secret,分别包含前面创建的两套证书;
本文将介绍如何使用 DM binary 快速部署 DM 集群。 准备工作 下载官方 binary,链接地址:下载的文件中包括子目录 bin 和 conf。bin 目录下包含 dm-master、dm-worker、dmctl 以及 Mydumper 的二进制文件。conf 目录下有相关的示例配置文件。 使用样例 假设在两台服务器上部署 MySQL,在一台服务器上部署 TiDB(mocktikv 模式),另外在三台服务器上部署两个 DM-worker 实例和一个 DM-master 实例。各个节点的信息如下: 实例 服务器地址 MySQL1 192.168.0.1 MySQL2 192.1
在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令。grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂。 于是,为了简化 grep 的语句并达到同等效果,很多业内高手开发出了很多同样强大的工具,在某些程度上甚至可以替代 grep 。 下面我就给大家介绍 5 个常用的命令行搜索工具。如果你不喜欢使用编辑器或 IDE 来查找代码关键字,那么这几个工具将对你十分有帮助。 这 5 个工具有些仅适用于类 Unix 系统,但也有一些是跨平台的搜索速度非常快的工具。 grep 使用 grep 的优势是它几乎可以在任意类 Unix
1.Redis是什么? Redis是一个开放源代码(BSD许可)的内存中数据结构存储,可用作数据库,缓存和消息代理,是一个基于键值对的NoSQl数据库。 2.Redis特性? 速度快 基于键值对的数据结构服务器 丰富的功能、丰富的数据结构 简单稳定 客户端语言多 持久化 主从复制 高可以 & 分布式 3.Redis合适的应用场景? 缓存 排行榜 计数器 分布式会话 分布式锁 社交网络 最新列表 消息系统 4.除了Redis你还知道哪些NoSQL数据库? MongoDB、MemcacheDB、Cassandra、CouchDB、Hypertable、Leveldb。 5.Redis和Memc
1. 前言 上一篇对 Spring MVC 的函数式接口编程进行了简单入门,让很多不知道的同学见识了这种新操作。也有反应这种看起来没有传统写法顺眼,其实大家都一样。但是我们还是要敢于尝试新事物。Java Lambada 刚出来也是被人各种吐槽,现在我在很多项目都见到了它的身影。好了转回正题,本文是对上一篇的延伸,我们继续对 Functional Endpoint 进行一些了解和运用。范式转换其实上一篇已经介绍差不多了,但是一旦你初次接触这种方式往往会面临新的问题。 2. 新的问题 在使用这种风格时我们也会遇到一些新的问题。接下来我们将通过举例来一步步解决这些问题。 2.1 如何异常处理 接
我写了多年的 Go 微服务,并在写完两本关于 (API Foundations in Go 和 12 Factor Applications with Docker and Go) 主题的书之后,有了一些关于如何写好 Go 代码的想法 但首先,我想给阅读这篇文章的读者解释一点。好代码是主观的。你可能对于好代码这一点,有完全不同的想法,而我们可能只对其中一部分意见一致。另一方面,我们可能都没有错,只是我们从两个角度出发,从而选择了不同的方式解决工程问题,并不意味着意见不一致的不是好代码。 包 包很重要,你可能会反对 - 但是如果你在用 Go 写微服务,你可以将所有代码放在一个包中。当然,下面
回看这几年,分布式系统领域出现了很多新东西,特别是云和 AI 的崛起,让这个过去其实不太 sexy 的领域一下到了风口浪尖,在这期间诞生了很多新技术、新思想,让这个古老的领域重新焕发生机。站在 2010s 的尾巴上,我想跟大家一起聊聊分布式系统令人振奋的进化路程,以及谈一些对 2020s 的大胆猜想。 无论哪个时代,存储都是一个重要的话题,今天先聊聊数据库。在过去的几年,数据库技术上出现了几个很明显的趋势。 存储和计算进一步分离 我印象中最早的存储-计算分离的尝试是 Snowflake,Snowflake 团队在 2016 年发表的论文《The Snowflake Elastic Data
分享下Oracle数据库的常用函数 一、字符函数 字符函数是oracle中最常用的函数,我们来看看有哪些字符函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char, m, n):截取字符串的子串,n代表取n个字符的意思,不是代表取到第n个 replace(char1, search_string, replace_string) instr(C1,C2,I,J) -->判断某字符或字符串是否存在,存在返回出现的位置的索引,否则返回小于1;在一个字符串中搜索指
“我希望能够把 TiDB 的设计的一些理念能够更好的传达给大家,相信大家理解了背后原因后,就能够把 TiDB 用的更好。” 做 TiDB 的缘起是从思考一个问题开始的:为什么在数据库领域有这么多永远也躲不开的坑?从 2015 年我们写下第一行代码,3 年以来我们迎面遇到无数个问题,一边思考一边做,尽量用最小的代价来快速奔跑。 作为一个开源项目,TiDB 是我们基础架构工程师和社区一起努力的结果,TiDB 已经发版到 2.0,有了一个比较稳定的形态,大量在生产环境使用的伙伴们。可以负责任的说,我们做的任何决定都经过了非常慎重的思考和实践,是经过内部和社区一起论证产生的结果。它未必是最好的,但