关键词:
目录
一、概述
数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。
我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失。所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。而数据库就是数据持久化的最佳选择。说白了,数据库就是存储数据的仓库。
数据库的技术的研究和发展:
1、关系型数据库(RDBMS):MySQL、Oracle、DB2、SQL Server......关系数据库中全都是表
2、非关系型数据库(NoSQL):
1、键值存储数据库:Redis
2、列式存储数据库:HBase
3、文档型数据库:MongoDB
4、图形数据库:Neo4J
3、NewSQL:这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性:TiDB。
1、从MySQL到TiDB
场景引入:假设现在有一个高速发展的互联网公司,核心业务库MySQL的数据量已经近亿行,且还在不断增长中,公司对于数据资产较为重视,所有数据要求多副本保存至少5年,且除了有对历史数据进行统计分析的离线报表业务外,还有一些针对用户数据实时查询的需求,如用户历史订单实时查询。
1.MySQL能否满足上述场景需求?
根据以往的MySQL使用经验,MySQL单表在5000万行以内时,性能较好,单表超过5000万行后,数据库性能、可维护性都会极剧下降。当然这时候可以做MySQL分库分表,如使用Mycat或Sharding-jdbc。
2.分库分表的能否解决问题?
分库分表优点非常明显,如:
将大表拆分成小表,单表数据量控制在5000万行以内,使MySQL性能稳定可控。
将单张大表拆分成小表后,能水平扩展,通过部署到多台服务器,提升整个集群的QPS、TPS、Latency等数据库服务指标。
但是,此方案的缺点也非常明显:
分表跨实例后,产生分布式事务管理难题,一旦数据库服务器宕机,有事务不一致风险。
分表后,对SQL语句有一定限制,对业务方功能需求大打折扣。尤其对于实时报表统计类需求,限制非常之大。事实上,报表大多都是提供给高层领导使用的,其重要性不言而喻。
分表后,需要维护的对象呈指数增长(MySQL实例数、需要执行的SQL变更数量等)
3.问题解决
基于以上核心痛点,我们需要探索新的数据库技术方案来应对业务爆发式增长所带来的挑战,为业务提供更好的数据库服务支撑。
调研市场上的各大数据库,我们可以考虑选用NewSQL技术来解决,因为NewSQL技术有如下显著特点:
1、无限水平扩展能力
2、分布式强一致性,确保数据100%安全
3、完整的分布式事务处理能力与ACID特性
而TiDB数据库 GitHub的活跃度及社区贡献者方面都可以算的上是国际的开源项目,是NewSQL技术中的代表性产品,所以我们可以选择使用TiDB数据库!
2、简介
NewSQL领域的代表是Google的spanner和F1,其号称可以实现全球数据中心容灾,且完全满足分布式事务的ACID,但是只能在Google云上使用。
TiDB诞生在大背景下,也弥补了国内在NewSQL领域中的空缺。TiDB自2015年5月写下第一行代码以来,至今已发布大小版本几十次,版本迭代十分迅速。
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性,支持在本地和云上部署。
1、OLTP和OLAP
OLTP:在线事务处理
强调支持短时间内大量并发的事务操作(增删改查)能力,每个操作涉及的数据量都很小(比如几十到几百字节)
强调事务的强一致性(例如:银行转账交易,容不得差错)
例:“双十一”期间,可能有几十万用户在同一秒内下订单。后台数据库要能够并发的、以近乎实时的速度处理这些订单请求(如果下了订单,十几秒还没有反应,用户肯定要骂人了)
OLAP:在线分析处理
偏向于复杂的只读查询,读取海量数据进行分析计算,查询时间往往很长
例:“双十一”结束,淘宝的运营人员对订单进行分析挖掘,找出一些市场规律等等。
这种分析可能需要读取所有的历史订单进行计算,耗时几十秒甚至几十分钟都有可能
3、TiDB整体架构
TiDB 分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的 TiDB 系统。对应的架构图如下:
TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。
PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。
存储节点
1、TiKV Server:负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 的 API 在 KV 键值对层面提供对分布式事务的原生支持,默认提供了 SI (Snapshot Isolation) 的隔离级别,这也是 TiDB 在 SQL 层面支持分布式事务的核心。TiDB 的 SQL 层做完 SQL 解析后,会将 SQL 的执行计划转换为对 TiKV API 的实际调用。所以,数据都存储在 TiKV 中。另外,TiKV 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
2、TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。
4、TiDB安装部署
TiDB安装环境要求高。必须严格按照官方要求安装。
开发及测试环境
组件 | CPU | 内存 | 本地存储 | 网络 | 实例数量(最低要求) |
---|---|---|---|---|---|
TiDB | 8 核+ | 16 GB+ | SAS, 200 GB+ | 千兆网卡 | 1(可与 PD 同机器) |
PD | 4 核+ | 8 GB+ | SAS, 200 GB+ | 千兆网卡 | 1(可与 TiDB 同机器) |
TiKV | 8 核+ | 32 GB+ | SSD, 200 GB+ | 千兆网卡 | 3 |
TiFlash | 32 核 + | 64 GB+ | SSD, 200 GB+ | 千兆网卡 | 1 |
TiCDC | 8 核 + | 16 GB+ | SSD, 200 GB+ | 千兆网卡 | 1 |
服务器总计 | 6 |
生产环境
组件 | CPU | 内存 | 硬盘类型 | 网络 | 实例数量(最低要求) |
---|---|---|---|---|---|
TiDB | 16 核+ | 48 GB+ | SAS | 万兆网卡(2块最佳) | 2 |
PD | 8 核+ | 16 GB+ | SSD | 万兆网卡(2块最佳) | 3 |
TiKV | 16 核+ | 64 GB+ | SSD | 万兆网卡(2块最佳) | 3 |
TiFlash | 48 核+ | 128 GB+ | 至少一块 SSD | 万兆网卡(2 块最佳) | 2 |
TiCDC | 16 核+ | 64 GB+ | SSD | 万兆网卡(2 块最佳) | 2 |
监控 | 8 核+ | 16 GB+ | SAS | 千兆网卡 | 1 |
服务器总计 | 13 |
TiDB安装-Local单机版
--我在电脑上装虚拟机Centos 7.9版本
在usr/创建tidb文件夹
--1、下载安装包
wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
--2、解压文件
tar -zxvf tidb-latest-linux-amd64.tar.gz
cd tidb-latest-linux-amd64
--3、启动
--3.1、启动PD
./bin/pd-server --data-dir=pd --log-file=pd.log &
--3.2、启动tikv
./bin/tikv-server --pd="127.0.0.1:2379" --data-dir=tikv --log-file=tikv.log &
--3.3、启动tidb-server
./bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=tidb.log &
--4、登录
mysql -h 127.0.0.1 -P 4000 -u root
---------------------------------------
[root@localhost tidb]# tar -zxvf tidb-latest-linux-amd64.tar.gz
tidb-v5.0.1-linux-amd64/
tidb-v5.0.1-linux-amd64/PingCAP Community Software Agreement(English Version).pdf
tidb-v5.0.1-linux-amd64/bin/
tidb-v5.0.1-linux-amd64/bin/pd-ctl
tidb-v5.0.1-linux-amd64/bin/tikv-server
tidb-v5.0.1-linux-amd64/bin/tikv-ctl
tidb-v5.0.1-linux-amd64/bin/reparo
tidb-v5.0.1-linux-amd64/bin/tidb-server
tidb-v5.0.1-linux-amd64/bin/drainer
tidb-v5.0.1-linux-amd64/bin/arbiter
tidb-v5.0.1-linux-amd64/bin/pump
tidb-v5.0.1-linux-amd64/bin/etcdctl
tidb-v5.0.1-linux-amd64/bin/pd-recover
tidb-v5.0.1-linux-amd64/bin/binlogctl
tidb-v5.0.1-linux-amd64/bin/tidb-ctl
tidb-v5.0.1-linux-amd64/bin/pd-server
tidb-v5.0.1-linux-amd64/PingCAP Community Software Agreement(Chinese Version).pdf
[root@localhost tidb]# cd tidb-v5.0.1-linux-amd64/
[root@localhost tidb-v5.0.1-linux-amd64]#
[root@localhost tidb-v5.0.1-linux-amd64]# ./bin/tikv-server --pd="127.0.0.1:2379" --data-dir=tikv --log-file=tikv.log &
[2] 1486
[root@localhost tidb-v5.0.1-linux-amd64]# ./bin/tidb-server --store-tikv --path="127.0.0.1:2379" --log-file=tidb.log &
[3] 1504
[root@localhost tidb-v5.0.1-linux-amd64]# ./bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=tidb.log &
[2] 1509
------------------------------
虚拟机上没安装mysql客户端,需要安装客户端验证。虚拟机内存需要大些,
否则启动tidb,会自动exit。
由于本机电脑内存不够,服务没起来。
TiDB安装-Docker集群版
在usr/tidb下操作
注意:需要安装docker,和docker-compose并启动docker进行如下操作。
--1、下载tidb-docker-compose
git clone https://github.com/pingcap/tidb-docker-compose.git
--2、创建并启动集群
--获取最新的docker镜像:
cd tidb-docker-compose && docker-compose pull && docker-compose up -d
--3、登录
mysql -h 127.0.0.1 -P 4000 -u root
---------------------------------------
[root@localhost tidb]# ll
total 505140
-rw-r--r--. 1 root root 517255312 Sep 10 04:26 tidb-latest-linux-amd64.tar.gz
drwxr-xr-x. 5 1000 1000 4096 Sep 10 05:35 tidb-v5.0.1-linux-amd64
[root@localhost tidb]# git clone https://github.com/pingcap/tidb-docker-compose.git
Cloning into 'tidb-docker-compose'...
remote: Enumerating objects: 575, done.
remote: Counting objects: 100% (29/29), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 575 (delta 12), reused 18 (delta 5), pack-reused 546
Receiving objects: 100% (575/575), 302.18 KiB | 0 bytes/s, done.
Resolving deltas: 100% (255/255), done.
[root@localhost tidb]# ll
total 505144
drwxr-xr-x. 14 root root 4096 Sep 10 07:31 tidb-docker-compose
-rw-r--r--. 1 root root 517255312 Sep 10 04:26 tidb-latest-linux-amd64.tar.gz
drwxr-xr-x. 5 1000 1000 4096 Sep 10 05:35 tidb-v5.0.1-linux-amd64
[root@localhost tidb]# cd tidb-docker-compose && docker-compose pull && docker-compose up -d
Pulling pd0 ... done
Pulling pd1 ... done
Pulling pd2 ... done
Pulling tikv0 ... downloading (100.0%)
Pulling tikv1 ... downloading (100.0%)
Pulling tikv2 ... downloading (100.0%)
Pulling tidb ... done
Pulling tispark-master ... downloading (100.0%)
Pulling tispark-slave0 ... downloading (100.0%)
Pulling tidb-vision ... done
Pulling pushgateway ... done
Pulling prometheus ... done
Pulling grafana ... download complete
ERROR: for tispark-slave0 write /var/lib/docker/tmp/GetImageBlob992726425: no space left on device
ERROR: for grafana write /var/lib/docker/tmp/GetImageBlob360950237: no space left on device
ERROR: for tikv2 write /var/lib/docker/tmp/GetImageBlob469180858: no space left on device
ERROR: for tikv1 write /var/lib/docker/tmp/GetImageBlob469180858: no space left on device
ERROR: for tikv0 write /var/lib/docker/tmp/GetImageBlob469180858: no space left on device
ERROR: for tispark-master write /var/lib/docker/tmp/GetImageBlob289944414: no space left on device
ERROR: write /var/lib/docker/tmp/GetImageBlob289944414: no space left on device
[root@localhost tidb-docker-compose]#
----------------------
由于我虚拟机环境配置不足导致no space,没有空间。
后续没进行完成。
[root@localhost tidb-docker-compose]# free -m
total used free shared buff/cache available
Mem: 990 250 394 1 346 594
Swap: 819 18 801
5、TiDB-读取历史数据
TiDB实现了通过标准SQL接口读取历史数据功能,无需特殊的client或者driver,当数据被更新,删除后,依然可以通过SQL接口将更新/删除前的数据读取出来。
另外即使在更新数据之后,表结构发生了变化,TiDB依旧能用旧的表结构将数据读取出来。
操作流程:
为支持读取历史版本数据,引入了一个新的system variable:tidb_snapshot,这个变量是session范围有效,可以通过标准的set语句修改其值。其值为文本,能够存储TSO和日期时间。TSO即是全局授时的时间戳,是从PD端获取的。日期时间格式为:"2022-09-08 16:45:26.999",一般来说可以只写到秒。比如"2022-09-08 16:45:26"。当这个变量被设置时,TiDB会用这个时间戳建立snapshot,随后的所有select操作都会在这个snapshot上读取数据。
注意:
TiDB的事务是通过PD进行全局授时,所以存储的数据版本也是以PD所授时间戳为版本号。在生成snapshot时,是以tidb_snapshot变量的值作为版本号,如果TiDB Server所在机器和PD Server所在机器的本地时间相差较大,需要以PD的时间为准。
当读取历史版本操作结束后,可以结束当前session或者通过set语句将tidb_snapshot变量的值设置为"",即可读取最新版本的数据。
select now(); --查询系统时间
set @@tidb_snapshot="2022-09-08 16:45:26"; --这个时间要在update/delete之前的时间
注意:tidb_snapshot前须使用@@ 而非@,因为@@表示系统变量,@表示用户变量。
6、数据迁移-TiDB Lightning
MySQL-->TiDB
TiDB Lightning是一个将全量数据高速导入到TiDB集群的工具,目前支持Mydumper或CSV输出格式的数据源。你可以在以下两种场景下使用Lightning:迅速导入大量新数据/备份恢复所有数据。
TiDB Lightning主要包含两个部分:
1、TiDB-Lightning("前端"):主要完成适配工作,通过读取数据源,在下游TiDB集群建表、将数据转换成键/值对(KV 对)发送到tikv-importer、检查数据完整性等。
2、tikv-importer("后端"):主要完成将数据导入TiKV集群的工作,把tidb-lightning写入的KV对缓存、排序、切分并导入到TiKV集群。
tikv-importer.toml
# TiKV Importer 配置文件模板
# 日志文件
log-file = "tikv-importer.log"
#日志等级:trace、debug、info、error、off。
log-level = "info"
[server]
# tikv-importer 监听的地址,tidb-lightning需要连到这个地址进行数据写入。
addr = "192.168.0.185:8287"
[import]
# 存储引擎文档(engine file)的文件夹路径
import-dir = "/mnt/ssd/data.import/"
run.sh
#!/bin/bash
nohup ./tidb-lightning \\
--importer 192.168.0.185:8287 \\
-d /data/my_database/ \\
--pd-urls 0.0.0.0:2379 \\
--tidb-host 192.168.0.185 \\
--tidb-user root \\
--log-file tidb-lightning.log \\
> nohup.out &
数据迁移步骤,可以去官网查看其他方式
在usr/tidb下操作
--1、下载安装包
wget https://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz
wget https://download.pingcap.org/tidb-toolkit-latest-linux-amd64.tar.gz
--2、解压文件
tar -zxvf tidb-enterprise-tools-latest-linux-amd64.tar.gz
tar -zxvf tidb-toolkit-latest-linux-amd64.tar.gz
--3、准备导出MySQL数据
cd /usr/tidb/tidb-enterprise-tools-latest-linux-amd64/bin
--使用tidb-enterprise-tools-latest-linux-amd64/bin下的mydumper导出MySQL数据
./mydumper -h 127.0.0.1 -P 3306 -u root -p 123456 -t 16 -F 256 -B mytest -T t1,t1 --skip-tz-utc -o /data/my_database
--上面命令:MySQL连接信息,用户名root,密码123456,开启16线程,单个文件大小256M,mytest数据库,
--t1,t2表,存储到/data/my_database目录下。
--4、启动tikv-importer
cd /usr/tidb/tidb-toolkit-latest-linux-amd64/bin
vim tikv-importer.toml
--把tikv-importer.toml内容复制进去
nohup ./tikv-importer.toml > nohup.out &
--5、启动tidb-lightning
vim run.sh
--把上面run.sh内容复制进去
chmod 755 run.sh
./run.sh
---去tidb数据库种看是否数据迁移成功
懂与不懂都是收获!
每天⽤⼼记录⼀点点。内容也许不重要,但习惯很重要!
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
猿创征文|分布式国产数据库tidb从入门到实战(代码片段)
写在前面本文讲解的是目前欢迎程度最高分布式国产数据库TiDB,详细讲解了TiDB的由来、架构、SQL基本操作、SpringBoot整合TiDB等内容。目录写在前面一、概述二、与MySQL兼容性对比三、安装使用四、SQL基本操作4.1、库操作4.2、... 查看详情
django入门学习--深入模板(templates)(代码片段)
??Django作为Web框架,需要一种很便利的方法去动态地生成HTML网页,因此有了模板这个概念。模板包含所需HTML的部分代码以及一些特殊的语法,特殊的语法用于描述如何将数据动态插入HTML网页中。Django可以配置一个或多个模板引... 查看详情
jpa入门及深入(代码片段)
一:ORM介绍 ORM(Object-RelationalMapping)表示对象关系映射。在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中。只要有一套程序能够做到建立对象与数据库的关联,操作对象就可以直接操作数据库数据,... 查看详情
大数据大数据组件tidb原理+实战篇(代码片段)
文章目录1.TiDB引入1.1.数据库技术发展简史1.2.从MySQL到TiDB1.3.TiDB概述1.4.数据库种类简介2.TiDB架构特性2.1.TiDB整体架构2.2.TiDB核心特性2.3.存储和计算能力3.TiDB安装部署3.1.TiDB-Local单机版3.2.TiDB-Docker集群版4.TiDB实践案例4.1.TiDB-SQL操作4.2... 查看详情
freemaker_入门+深入+开发指南+学习笔记(代码片段)
freemaker的基本语法freemaker的基本语法:<#...>中存放所有freemaker的内容,之外的内容全部原样输出。<@.../>是函数调用两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下... 查看详情
深入理解spring事务:入门使用原理(代码片段)
大家好,我是小灰。Spring事务是复杂一致性业务必备的知识点,掌握好Spring事务可以让我们写出更好地代码。这篇文章我们将介绍Spring事务的诞生背景,从而让我们可以更清晰地了解Spring事务存在的意义。接着,... 查看详情
入门以后如何深入学习c++?有哪些建议?(代码片段)
假设你决定开始将C++用于工作中,而你还没有怎么接触过C++。你可能参加过培训或者读过一两本有关C++的书,也可能两者都试过。你也已经写过第一个C++程序:#include<iostream.h>intmain()cout<... 查看详情
史上最全mybatis框架入门教程,从零开始带你深入♂学习——mybatis入门(代码片段)
Mybatis框架(一)mybatis入门mybatis的使用mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html如果使用Maven来构建项目,则需将下面的依赖代码置于pom.xml文件中:<dependency><groupId>org.mybatis</groupI 查看详情
mybatis从入门到精通—mybatis的dao实现和配置文件深入(代码片段)
Mybatis的Dao层实现传统开发方式编写UserDao接口publicinterfaceUserDaoList<User>findAll()throwsIOException;编写UserDaoImpl实现publicclassUserDaoImplimplementsUserDaopublicList<User>findAll()throwsIOExceptionIn 查看详情
tidb配置session级别内存配置(代码片段)
tidb配置session级别内存配置jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=tidb_mem_quota_query=16073741824 查看详情
tidb配置session级别内存配置(代码片段)
tidb配置session级别内存配置jdbc.url=jdbc:mysql://xxxx.xx.xx.xx/dbName?sessionVariables=tidb_mem_quota_query=16073741824 查看详情
大数据技术之kafkakafka概述kafka快速入门kafka架构深入(代码片段)
...用场景1.2.2消息队列的两种模式1.3Kafka基础架构2Kafka快速入门2.1安装部署2.2Kafka命令行操作3Kafka架构深入3.1Kafka工作流程及文件存储机制3.2Kafka生产者3.2.1分区策略3.2.2数据可靠性保证3.2.3ExactlyOnce语义3.3Kafka消费者3.3.1消费方式3.3.2 查看详情
大数据技术之kafkakafka概述kafka快速入门kafka架构深入(代码片段)
...用场景1.2.2消息队列的两种模式1.3Kafka基础架构2Kafka快速入门2.1安装部署2.2Kafka命令行操作3Kafka架构深入3.1Kafka工作流程及文件存储机制3.2Kafka生产者3.2.1分区策略3.2.2数据可靠性保证3.2.3ExactlyOnce语义3.3Kafka消费者3.3.1消费方式3.3.2 查看详情
tidb问题排查(代码片段)
TiDB集群问题导图1.服务不可用1.1客户端报"RegionisUnavailable"错误1.1.1"RegionisUnavailable"一般是由于region在一段时间不可用导致(可能会遇到"TiKVserverisbusy"或者发送给TiKV的请求由于notleader或者epochnotmatch被打回... 查看详情
使用dockercompose安装tidb(代码片段)
参考文章:https://blog.csdn.net/weixin_33729196/article/details/86018480目标单机上通过DockerCompose快速一键部署一套TiDB测试集群前提条件1.centos版本在7.3以上,内存大于6G2.安装git3.安装docker4.安装docker-compose开始安装1.下载tidb-docker-c 查看详情
tidb查询优化及调优系列tidb查询计划简介(代码片段)
「TiDB查询优化及调优」系列文章将通过一些具体的案例,向大家介绍TiDB查询及优化相关的原理和应用,在上一篇文章中我们简要介绍了TiDB查询优化器的优化流程。查询计划(executionplan)展现了数据库执行SQL语句... 查看详情
深入理解wkwebview(入门篇)——webkit源码调试与分析(代码片段)
????????关注后回复 “进群” ,拉你进程序员交流群????????作者丨童红明来源丨百度App技术前言移动互联网时代,网页依旧是内容展示的重要媒介,这离不开WebKit浏览内核技术的支持与发展。在iOS平台下开发者们需要... 查看详情
八.全文检索elasticsearch经典入门-深入理解elasticsearch核心原理(代码片段)
前言前面我们讲了ElasticSearch从认识到安装,到基本CRUD和SpringBoot整合ES实战,相信你学完之后就可以把ES融入到企业级项目开发了。本篇文章我们将深入了解一下ElasticSearch原理性的东西,我会以面试题总结的方式来展... 查看详情