支持高性能模糊检索的内存数据库 ems

23
支支支支支支支支支支支支支支支 EMS 百百 百百百百百 百百百 2011-7-05

Upload: dean-king

Post on 02-Jan-2016

118 views

Category:

Documents


0 download

DESCRIPTION

支持高性能模糊检索的内存数据库 EMS. 百度 商务搜索部 罗立刚. 2011-7-05. 内容. 1. EMS 简介. 2. EMS 架构和工作原理. 3. EMS 性能测试. 4. 5. EMS 典型应用. 5. EMS 下一步工作. 5. EMS 的定义. EMS: Extreme Mirror System EMS 针对物理内存而优化的应用层内存镜像数据库,具有以下特点 : 支持从异构数据源实时同步数据 支持个性化的数据镜像 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 支持高性能模糊检索的内存数据库 EMS

支持高性能模糊检索的内存数据库 EMS

百度 商务搜索部 罗立刚

2011-7-05

Page 2: 支持高性能模糊检索的内存数据库 EMS

2

内容

EMS架构和工作原理

1

2

4 EMS典型应用

3 EMS性能测试

EMS简介

55 EMS下一步工作

5

Page 3: 支持高性能模糊检索的内存数据库 EMS

3

EMS的定义

EMS: Extreme Mirror System

EMS 针对物理内存而优化的应用层内存镜像数据库,具有以下特点:–支持从异构数据源实时同步数据–支持个性化的数据镜像–支持定制化的索引结构–支持 SQL-LIKE 的更新和查询–极高的响应速度

Page 4: 支持高性能模糊检索的内存数据库 EMS

4

高速聚集的海量信息

快速增长的用户群

互联网的快速发展 需要新型数据库管理系统

信息服务遇到瓶颈

快速处理海量信息

满足大量并发访问

极高的并发访问能力

极强的业务定制能力

信息管理系统 磁盘数据库管理系统 内存数据库管理系统

数据库系统处理能力不足

EMS产生的背景

Page 5: 支持高性能模糊检索的内存数据库 EMS

5

传统数据库查找数据的方式

SQL Query Optimizer & Executor

Application Determine Disk Address of Desired Record

Table# Page#IPC

Assuming the Page is Already in Memory… Locate Page

Pointer Via Hashing and Linear Search

Copy Row to Private Buffer

Send buffer to application (via IPC)

Hash FunctionBuffer Tool

Linked Lists Into Buffers

Linked Lists Into Buffers

Data PageData Page

Page 6: 支持高性能模糊检索的内存数据库 EMS

6

Data Store

SQL Query Optimizer & Executor Memory Address

Application

The full database is preloaded from disk to memory

Determine Memory Address of Desired Record

Copies data to application buffers Memory-Resident Database

内存数据库查找数据的方式

Page 7: 支持高性能模糊检索的内存数据库 EMS

7

内容

EMS架构和工作原理

1

2

4 EMS典型应用

3 EMS性能测试

EMS 简介

55 EMS下一步工作

5

2

Page 8: 支持高性能模糊检索的内存数据库 EMS

8

mysql 2 armor ……公共数据源

本地数据镜像

业务系统

EMS 系统架构

上游同步管理

数据处理

下游同步管理

业务逻辑 so 监控管理

mysql 1

ZCache Memcache

请求解析

数据和表管理 索引管理

replicate

update

BROKER

STORAGE

Page 9: 支持高性能模糊检索的内存数据库 EMS

9

BROKER

高版本 MySQL 向低版本复制跨数据库系统的复制支持多主库向单台 Slave 的复制支持数据触发,用户可对数据增量进行预处理,代替

数据库触发器

Page 10: 支持高性能模糊检索的内存数据库 EMS

10

STORAGE

命令服务:创建表、删除表、 dump 表、load 表、查看表信息、更新表状态(启动、停止更新、检索服务等),支持动态加载可向 storage 发送命令请求的白名单 ip 列表。

更新服务:插入表记录、删除表记录、更新表记录,支持动态加载可向 storage 发送更新请求的白名单列表。

检索服务:对某列、某几列的精确、范围、模糊查找,及对结果的 order by 、 limit 等。

监控服务:动态监控遵循《动态监控协议规范 [AMPv1] 》,监控系统运行状况。

Page 11: 支持高性能模糊检索的内存数据库 EMS

11

接收 binlog

写入in-relay-log

检查系统状态(是否停止了同步, 或修改了同步点)

in-relay-log

write

读取一条 binlog

read

mysql 上游

select *

将结果转换为 insert 增量

binlog 同步socket

selectsocket

binlog 同步线程

binlog 解析线程

data reset 回调函数提交中间数据

解析 binlog表、字段筛选

数据格式转换、执行 .so 中的用户业

务逻辑处理

将处理后的 mcpack写入 out-relay-log

out-relay-log

mcpackmcpack

write

read

上游

同步

数据

处理

下游

更新

ems-storage 下游

update socket

检查系统状态(是否停止了同步, 或修改了同步点)

读取一个 mcpack

转换为下游的格式

对下游执行更新操作

下游更新线程

BROKER工作原理

Page 12: 支持高性能模糊检索的内存数据库 EMS

12

解析模块(解析请求、合法性判断、组装响应包等)

创建、删除表

更新 、查找

调用、返回

外部请求

(列名称、列类型、默认值、所在记录偏移量、索引信息、读取/填充接口等)

Field

(创建、删除表、更改表状态等)

TableManager

Field_1

Table

BlockManager

Field_2 Field_3 Field_4 ……MetaData:

Mem table:

(Dump、l oad、更新 、查询api逻辑实现等)

hash_functor

cmp_functor

辅助存储类fi eld_value,resul t_t等

辅助结构其他……

Uti l 工具类

索引接口

基础索引接口 Val ue存储类型接口

一般索引 模糊索引

BtreeList

PhashmapSortedListSingleValue Ext_vector

索引部分

Blockl i st

freel i st

TTT

TTT

Block

……

el ementel ementel ement

……

el ementel ementel ement

Bl ockManager

存储、管理记录off set(等同记录

指针)

管理、存储记录

Block实例

Block实例

STORAGE工作原理

Page 13: 支持高性能模糊检索的内存数据库 EMS

13

系统限制

基于 MYSQL5.1 行复制协议同步的更新指令是幂等操作storage 不支持联表查询storage 不支持事务

Page 14: 支持高性能模糊检索的内存数据库 EMS

14

内容

EMS 架构和工作原理

1

4 EMS典型应用

3 EMS性能测试

EMS 简介

55 EMS下一步工作

5

22

Page 15: 支持高性能模糊检索的内存数据库 EMS

15

性能测试条件

所有测试均基于如下表结构进行:CREATE TABLE `wordinfo` (

`adid` int(10) unsigned NOT NULL,

`unitid` int(10) unsigned NOT NULL,

`planid` int(10) unsigned NOT NULL,

`userid` int(10) unsigned NOT NULL,

`keyword` char(40) character set gbk collate gbk_bin NOT NULL)’ 

Storage 主程序测试:内存: 64G CPU : 8 核 Intel(R) Xeon(R) CPU 2.40GHz

针对 adid + userid +keyword 列建立 hashmap 索引

Page 16: 支持高性能模糊检索的内存数据库 EMS

16

性能测试结果

broker 每秒处理增量 4w 行Like 操作是 mysql 的 1000 倍

场景 性能数据插入 逐条插入 1200/s

检索

winfoid=X(254154638/254154974) 9000/s

Userid=1163904 and keyword like “ 鲜花” 4600/s

keyword like “ 尼龙” 170/s

Page 17: 支持高性能模糊检索的内存数据库 EMS

17

性能测试详表

功能点 场景 性能指标load 加载 wordinfo 导出表 2 亿 + 记录 14.2w 行 /s 内存:dump Dump 2 亿 + 记录 50w 行 /sinsert 从 wordinfo 表导出数据选取前 100w

行,逐行插入。插入前 storage 已load 大约 2 亿 + 记录

RTT / 长连接 单线程 10 线程

RTT=0 6400/s 21000/s

RTT=0.5ms 1250/s 6000/s

update 从 wordinfo 表导出数据选取前 100w行,逐行更新 planid 与 unitid 字段。更新前 storage 已 load 大约 2 亿 + 记录

RTT / 长 连接

单线程 10 线程

RTT=0 6300/s 24000/sRTT=0.5ms 1460/s 13800/s

remove 从 wordinfo 表导出数据选取前 100w行,逐行删除入。删除入前 storage已 load 大约 2 亿 + 记录

RTT/ 长连接 单线程 10 线程RTT=0 3000/s 3500/sRTT=0.5ms 1300/s 5000/s

Select 随机选取 usesrid 与 keyword ,进行如下语义查询:Select * from wordinfo where userid=X and keyword like W

RTT / 短连接 多线程RTT=0 1000+/s 返回

100+ 记录RTT=0.5ms 1000+/s 返 回

100+ 记录

Page 18: 支持高性能模糊检索的内存数据库 EMS

18

内容

EMS 架构和工作原理

1

4 EMS典型应用

3 EMS 性能测试

EMS 简介

55 EMS下一步工作

5

22

Page 19: 支持高性能模糊检索的内存数据库 EMS

19

EMS典型应用

联表映射应用场景:用户中心“通用用户列表”

–按同一主键多表合并,将不同数据库中的表复制到同一数据库中,实现跨库联表

user1

userid

name

groupid

user2

userid

provid

cityid

tradeid

user3

userid

clk

show

sum

UserAll

userid

name

groupid

provid

cityid

tradeid

clk

show

sum

Page 20: 支持高性能模糊检索的内存数据库 EMS

20

EMS典型应用

异构的数据表复制,提供个性化的数据镜像应用场景:

–凤巢系统,关键词推荐,百度说吧, CRM 等

Mysql_1 Mysql_0

FCDB

adid

userid

keyword

ADINFO

adid

adddes

adurl

BROKER

STORAGE

Userid : 一般索引 Keyword : hashmap 索引

ADINFO_mirro

adid

userid

keyword

addes

armor

Page 21: 支持高性能模糊检索的内存数据库 EMS

21

内容

EMS 架构和工作原理

1

2

4 EMS 典型应用

3 EMS 性能测试

EMS 简介

55 EMS下一步工作

5

Page 22: 支持高性能模糊检索的内存数据库 EMS

22

EMS下一步工作

集群的支持 ACID 的支持 持久化支持

Page 23: 支持高性能模糊检索的内存数据库 EMS

23

THANKS

Q&A