Transcript EMS典型应用
支持高性能模糊检索的内存数据库EMS 百度 商务搜索部 罗立刚 2011-7-05 内容 2 1 EMS简介 2 EMS架构和工作原理 3 EMS性能测试 4 EMS典型应用 5 5 EMS下一步工作 5 EMS的定义 EMS: Extreme Mirror System EMS针对物理内存而优化的应用层内存镜像数据库, 具有以下特点: –支持从异构数据源实时同步数据 –支持个性化的数据镜像 –支持定制化的索引结构 –支持SQL-LIKE的更新和查询 –极高的响应速度 3 EMS产生的背景 高速聚集的海量信息 互联网的快速发展 信息服务 遇到瓶颈 需要新型数据 库管理系统 快速增长的用户群 数据库系统处理能力不足 快速处理海量信息 极高的并发访问能力 满足大量并发访问 极强的业务定制能力 信息管理系统 4 磁盘数据库管理系统 内存数据库管理系统 传统数据库查找数据的方式 Application Determine Disk Address of Desired Record SQL IPC Query Optimizer & Executor Table# Page# Send buffer to application (via IPC) Buffer Tool Hash Function Linked Lists Into Buffers Copy Row to Private Buffer Linked Lists Into Buffers Data Data Page Page 5 Assuming the Page is Already in Memory… Locate Page Pointer Via Hashing and Linear Search 内存数据库查找数据的方式 Application SQL Copies data to application buffers Data Store 6 Determine Memory Address of Desired Record Query Optimizer & Executor Memory-Resident Database The full database is preloaded from disk to memory Memory Address 内容 7 1 EMS简介 22 EMS架构和工作原理 3 EMS性能测试 4 EMS典型应用 5 5 EMS下一步工作 5 EMS 系统架构 公共数据源 mysql 1 armor mysql 2 …… replicate 上游同步管理 数据处理 业务逻辑so 监控管理 下游同步管理 update 本地数据镜像 请求解析 数据和表管理 索引管理 业务系统 8 ZCache Memcache BROKER 高版本MySQL向低版本复制 跨数据库系统的复制 支持多主库向单台Slave的复制 支持数据触发,用户可对数据增量进行预处理,代替 数据库触发器 9 STORAGE 命令服务:创建表、删除表、dump表、 load表、查看表信息、更新表状态(启 动、停止更新、检索服务等),支持动 态加载可向storage发送命令请求的白名 单ip列表。 更新服务:插入表记录、删除表记录、更新表记录,支持 动态加载可向storage发送更新请求的白名单列表。 检索服务:对某列、某几列的精确、范围、模糊查找,及对 结果的order by、limit等。 监控服务:动态监控遵循《动态监控协议规范 [AMPv1]》, 监控系统运行状况。 10 BROKER工作原理 binlog 同步 socket 检查系统状态 (是否停止了同步, 或修改了同步点) read 接收 binlog inrelay-log 写入 in-relay-log write binlog 同步线程 select socket mysql 上游 读取一条 binlog select * 解析 binlog 表、字段筛选 将结果转换为 insert 增量 上 游 同 步 data reset 回调函数 提交中间数据 binlog 解析线程 outrelay-log 检查系统状态 (是否停止了同步, 或修改了同步点) mcpack write mcpack read 数据格式转换、 执行 .so 中的用户业 务逻辑处理 读取一个 mcpack 将处理后的 mcpack 写入 out-relay-log 下 游 更 新 转换为下游的格式 对下游执行更新操作 下游更新线程 11 数 据 处 理 update socket ems-storage 下游 STORAGE工作原理 外部请求 解析模块(解析请求、合法性判断、组装响应包等) 更新、 查找 创建、 删除表 TableManager (创建、删除表、更改 表状态等) Table (Dump、load、更新、查询api逻辑实现等) MetaData: Field_1 Mem table: BlockManager Field_2 Field_3 Field_4 Util 工具类 辅助存储类 field_value,result_t等 辅助结构 …… hash_functor 其他…… cmp_functor 调用、返回 Field (列名称、列类型、默认值、 所在记录偏移量、索引信 息、读取/填充接口等) 索引部分 BlockManager Block实例 Blocklist T T T 存储、管理记录 offset(等同记录 指针) 索引接口 Block element element element 一般索引 模糊索引 …… Block实例 12 T T T 管理、存储记录 freelist element element element …… 基础索引接口 Btree Value存储类型接口 Phashmap SingleValue List SortedList Ext_vector 系统限制 基于MYSQL5.1 行复制协议 同步的更新指令是幂等操作 storage不支持联表查询 storage不支持事务 13 内容 14 1 EMS简介 22 EMS架构和工作原理 3 EMS性能测试 4 EMS典型应用 5 5 EMS下一步工作 5 性能测试条件 所有测试均基于如下表结构进行: 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索引 15 性能测试结果 broker每秒处理增量4w行 Like操作是mysql的1000倍 场景 插入 检索 逐条插入 1200/s winfoid=X(254154638/254154974) 9000/s Userid=1163904 and keyword like “鲜花” 4600/s keyword like “尼龙” 16 性能数据 170/s 性能测试详表 功能点 load dump insert update remove Select 17 场景 加载wordinfo导出表2亿+记录 Dump 2亿+记录 从wordinfo表导 出数据 选取前 100w 行,逐行插入。插入前storage已load 大约2亿+ 记录 性能指标 14.2w行/s 内存: 50w 行/s RTT / 长连接 单线程 10线程 RTT=0 6400/s 21000/s RTT=0.5ms 1250/s 6000/s 从wordinfo表导 出数据 选取前 100w RTT / 长连 单线程 行,逐行更新planid与unitid字段。更 接 RTT=0 6300/s 新前storage已load 大约2亿+ 记录 RTT=0.5ms 1460/s 10线程 从wordinfo表导 出数据 选取前 100w RTT/长连接 单线程 行,逐行删除入。删除入前storage RTT=0 3000/s 已load 大约2亿+ 记录 RTT=0.5ms 1300/s 10线程 随机选取usesrid 与 keyword,进行如 RTT / 短连接 下语义查询: Select * from wordinfo where userid=X RTT=0 and keyword like W RTT=0.5ms 24000/s 13800/s 3500/s 5000/s 多线程 1000+/s 返 回 100+记录 1000+/s 返 回 100+记录 内容 18 1 EMS简介 22 EMS架构和工作原理 3 EMS性能测试 4 EMS典型应用 5 5 EMS下一步工作 5 EMS典型应用 联表映射 应用场景:用户中心“通用用户列表” –按同一主键多表合并,将不同数据库中的表复制到同一数据库中, 实现跨库联表 UserAll user1 userid userid user2 name userid user3 groupid provid userid … cityid clk tradeid show … sum … name groupid provid cityid tradeid clk show sum 19 EMS典型应用 异构的数据表复制,提供个性化的数据镜像 应用场景: –凤巢系统,关键词推荐,百度说吧,CRM等 ADINFO FCDB adid adid userid adddes keyword Mysql_0 Mysql_1 armor adurl … … BROKER ADINFO_mirro adid userid keyword addes 20 STORAGE Userid: 一般索引 Keyword:hashmap索引 内容 21 1 EMS简介 2 EMS架构和工作原理 3 EMS性能测试 4 EMS典型应用 5 5 EMS下一步工作 5 EMS下一步工作 集群的支持 ACID的支持 持久化支持 22 Q&A THANKS 23