2

RedisJson横空出世

近期官网给出了RedisJson(RedisSearch)的性能测试报告,可谓碾压其他NoSQL,下面是核心的报告内容,先上结论:对于隔离写入(isolated writes),RedisJSON 比 MongoDB 快 5.4 倍,比 ElasticSearch 快 200 倍以上。对于隔离读取(isolated reads),RedisJSON 比 MongoDB 快 12.7 倍,比 ElasticSearch 快 500 倍以上。在混合工作负载场景中,实时更新不会影响 RedisJSON 的搜索和读取性能,而 ElasticSearch 会受到影响。RedisJSON* 支持的操作数/...

阅读全文>>

2

数据库敏感数据加密实现方案

背景数据库明文存储,诸如内部高权用户或侵入数据库服务器的黑客,都可以毫无阻碍地访问数据库的重要数据,一些敏感数据在存储期间的机密性并不能得到有效的保障。根据信息安全的目标,需要对应用生产数据加密,达到满足安全要求,预防存储层明文泄密,实现自主可控安全。总体思路数据库层存储敏感字段为加密,展现层传递应用层为明文传输,应用层接收到明文数据,通过加密应用实现数据加密,实现数据加密存储。加密应用同时提供加密解密api,以及算法、密钥管理。简单设计图如下:总体思路加解密实现方式应用层主要通过切面方式进行数据的加解密,切入点切到数据库入库、查询方法,实现改造代价小,加解密字段可配置的目标。具体的切入思路如...

阅读全文>>

1

MySQL数据库,表结构设计的五个维度

一、数据场景1、表结构简介任何工具类的东西都是为了解决某个场景下的问题,比如Redis缓存系统热点数据,ClickHouse解决海量数据的实时分析,MySQL关系型数据库存储结构化数据。数据的存储则需要设计对应的表结构,清楚的表结构,有助于快速开发业务,和理解系统。表结构的设计通常从下面几个方面考虑:业务场景、设计规范、表结构、字段属性、数据管理。2、用户场景例如存储用户基础信息数据,通常都会下面几个相关表结构:用户信息表、单点登录表、状态管理表、支付账户表等。用户信息表存储用户三要素相关信息:姓名,手机号,身份证,登录密码,邮箱等。CREATE TABLE `ms_user_center` ...

阅读全文>>

2

菜鸟积分系统稳定性建设 - 分库分表&百亿级数据迁移

一 前言拆库&数据迁移说白了,考验的不是一个人的技术功底,而是一个人干活的细致程度,以及抗压能力。无论在哪个公司,数据库迁移的机会都不会太多,因此,我也是非常珍惜这次历练,用阿里的一句老话来说就是 “因人成事,借事修人”。写这篇文章的目的主要是自己进行一个总结,也希望能给需要的同学们一些参考。二 背景在星爷的《大话西游》中有一句非常出名的台词:“曾经有一份真挚的感情摆在我的面前我没有珍惜,等我失去的时候才追悔莫及,人间最痛苦的事莫过于此,如果上天能给我一次再来一次的机会,我会对哪个女孩说三个字:我爱你,如果非要在这份爱上加一个期限,我希望是一万年!”在我们开发人员的眼中,这个感情就和我...

阅读全文>>

1

我是如何设计短域名服务的,欢迎大家吐槽

今天刚收到一个短信,里面就有一个短域名。这个短域名的目的很简单,为了在发短信的时候能省点钱,并且让用户体验不要那么糟糕,动不动发一个几百个字符的URL,小白用户一脸懵逼。其实短域名的原理非常简单,当你访问这个段域名的时候,短域名服务器会给你重定向到到真实的URL,浏览器会自动跳转到这个真实的URL。那么如何设计这样一个短域名服务呢?下面谈谈我个人的设想。第一个需要解决的问题,是如何生成这样一个短域名随机串。我们可以通过随机函数从 [a-z 0–9 A-Z] 这 62 字符(尽管中划线和下划线也是合法字符)里面随意的组合,那么它有多少种可能呢?如果是 7 未随机串 62⁷ = 3,521,614...

阅读全文>>

1

MySQL数据库大森林:B树、B+树、二叉树、红黑树

1、二叉树:每个节点最多只有两个子树的树结构2、B树和B+树2.1、区别1)B+树只有叶子节点会存储指针,B树所有节点都带2)B+树叶子节点存储了所有数据,B树在内部节点出现的数据不会出现在叶子节点3)B+树所有叶子节点都是通过指针连在一起,B树不是2.2、B+树优点1)内部节点不存储指针,使得一个内部节点中可以容纳更多的数据2)叶子节点通过指针连在一起范围扫描很方便,B树就要在叶子节点和内部节点之间不停往返2.3、B树优点对于内部节点,可以直接得到指针2.4、为什么数据库索引用B+树1)因为叶子节点上存储了所有的数据和索引而且相互之间用指针连在一起,对于范围查找不用跨层就能把数据查出来2)因...

阅读全文>>

1

高并发,你真的理解透彻了吗?

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多。大概分成这样几类:1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等关键数据。2、设计了一些方案,但是细节掌握不透彻:讲不出该方案要关注的技术点和可能带来的副作用。...

阅读全文>>

1

基于 Mysql 实现一个简易版搜索引擎

前言前段时间,因为项目需求,需要根据关键词搜索聊天记录,这不就是一个搜索引擎的功能吗? 于是我第一时间想到的就是 ElasticSearch 分布式搜索引擎,但是由于一些原因,公司的服务器资源比较紧张,没有额外的机器去部署一套 ElasticSearch 服务,而且上线时间也比较紧张,数据量也不大,然后就想到了 Mysql 的全文索引。简介其实 Mysql 很早就支持全文索引了,只不过一直只支持英文的检索,从5.7.6 版本开始,Mysql 就内置了 ngram 全文解析器,用来支持中文、日文、韩文分词。Mysql 全文索引采用的是倒排索引的原理,在倒排索引中关键词是主键,每个关键词都对应着一...

阅读全文>>

1

MySQL 时间类型 datetime、bigint、timestamp选哪个?很多人答错了

数据库中可以用datetime、bigint、timestamp来表示时间,那么选择什么类型来存储时间比较合适呢?前期数据准备通过程序往数据库插入50w数据数据表:CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_date` datetime NOT NULL, `time_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `time_long` bigint(20) NOT ...

阅读全文>>

1

MongoDB 5.0 新特性速览

前言:7 月 13 号, MongoDB 发布了大版本 5.0。本文由社区成员肖贝贝在14号发布于知乎上,他选择了一些亮眼的特性介绍给大家。文末我们还给大家介绍了两个MongoDB岗位,以及MongoDB 5.0 新特性在线研讨会入口,欢迎关注!时序集合: 版本核心功能在创建集合时, 可以指定此集合为时序集合, 一个创建命令如下: db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metada...

阅读全文>>