移动应用形态在数据库上所需的适应性改变_敬宓

上传人:xzh****18 文档编号:44707751 上传时间:2018-06-14 格式:PDF 页数:31 大小:1.56MB
返回 下载 相关 举报
移动应用形态在数据库上所需的适应性改变_敬宓_第1页
第1页 / 共31页
移动应用形态在数据库上所需的适应性改变_敬宓_第2页
第2页 / 共31页
移动应用形态在数据库上所需的适应性改变_敬宓_第3页
第3页 / 共31页
移动应用形态在数据库上所需的适应性改变_敬宓_第4页
第4页 / 共31页
移动应用形态在数据库上所需的适应性改变_敬宓_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《移动应用形态在数据库上所需的适应性改变_敬宓》由会员分享,可在线阅读,更多相关《移动应用形态在数据库上所需的适应性改变_敬宓(31页珍藏版)》请在金锄头文库上搜索。

1、移动应用在数据库上所需的 适应与改变 lockfree Agenda LBS 的应用特点与面临的问题 当 RDBMS 与 NOSQL 遇到 LBS 街旁的解决之道:CrabDB 多一维的视角 实时的签到计算 签到 计算地主 计算惊喜 弹出攻略 去过的好友 计算积分 大量实时计算 实时的签到计算(Cont.) 实时的签到计算(Cont.) 迅猛的压力高峰 与众不同的广告类型 快速的需求变化 LBS 的快速发展 未来产品的发展 性能的需求 低成本的硬件平台 Agenda LBS 的应用特点与面临的问题 当 RDBMS 与 NOSQL 遇到 LBS 街旁的解决之道:CrabDB RDBMS 如何处理

2、? 一张简单的表 loc_post (示例) id loc_id user_id private 0 1 3 0 1 1 3 1 2 1 3 2 SELECT Count(DISTINCT user_id) FROM loc_post WHERE loc_id = 1 and private = 0; 1 SELECT Count(user_id) FROM loc_post WHERE loc_id = 1 and private = 0; 1 SELECT Count(DISTINCT user_id) FROM loc_post WHERE loc_id = 1 and private

3、9M users 3M checkins/day(52 checkin/sec) 20M places MongoDB, PostgreSQL (legacy, migrating off) all on EC2 40 machines (68GB, m2.4xl on EC2) http:/ how-foursquare-uses-mongodb/ 选择MongoDB Schema-Free 减少 join Replica-sets 与容灾 GEO-Indices 高性能 为什么迁移出 MongoDB 数据总量大(超出内存),IO 压力比较高 CPU load avg: 4(16 核 64G

4、 内存) 为什么迁移出 MongoDB (Cont.) Pagefaults 频繁 Median = 26 pagefaults/sec Avg = 33.86 pagefaults/sec MongoDB 不适用分析(1):数据膨胀 BSON 是把双刃剑 - Schema Free - 空间开销巨大 索引过多 数组索引 MongoDB 不适用分析(2):内存有限 不同版本 Linux 内核实现 mmap(2) 的 writeback 机制差异 缓存粒度难以有效控制(OS负责页面换入换出) LBS 中对大量长尾数据的访问造成随机读写 vmtouch 告诉我们只有 35.5% 的数据被缓存 Mo

5、ngoDB 不适用分析(3):数据分布 数据分布不可控,按照非 _id 连续访问记录并不具备优势 - LBS 计算中存在大量选择所有属于同一个 user_id 的记录并计算的需求 - RDBMS 中可以使用 Clustered Index Agenda LBS 的应用特点与面临的问题 当 RDBMS 与 NOSQL 遇到 LBS 街旁的解决之道:CrabDB CrabDB 的数据结构 简单的 key - list loc_id: user_id : id, private, , user_id : id, private, , user_id : id, private, , 定长存储 Cra

6、bDB的查询与计算 多种查询(类似于 MongoDB 的调用) db.find( Expr ) db.group( Expr ) db.sort( Expr ) db.limit( Expr ) db.count() 条件表达式支持 tcc 动态编译表达式请求(比 MongoDB 中 js 实现表达式计算更快) 更加方便快速的实现复杂的表达式 group( datetime / 86400): 将存储的 datetime 类型转换为天进行聚合 find(R.id * 2 = 6) 快速的查询与计算 一些用例及对比 对比 更多查询(Python 调用) crab.location_post1.f

7、ind(R.privacy = 0) | R.user_id.in(1,2,3,4,5).count() crab.location_post1.find(R.type = 2, R.user_id.in(123, 456, 678).sort(R.is_great, -R.num_likes, -R.post_id) CrabDB MongoDB crab.user_post3.find(R.type = 3) db.post.find(u: 3, type: 3) CrabDB 的存储分配 Slab 分配策略 按照比例扩容 只保存数值,内存利用率高,便于压缩 放在内存中,减少IO Crab

8、DB 的分布式实现 分布式对象系统 Master / Slave CrabDB 可以被部署在任何机器 CrabDB 只用于计算 Slab 块在后台异步扩容 CrabDB 的分布式实现(Cont.) 扩展性 扩展计算 扩展存储 容灾与恢复 恢复计算 恢复存储 CrabDB 上线后的成果 系统响应更快 MongoDB 压力大幅降低,线上机器资源大 幅节省 写入未减少是因为数据被备份至 MongoDB CrabDB 上线后的成果(Cont.) Pagefaults 大幅减少 Median = 1 pagefaults/sec Avg = 2.33 pagefaults/sec 让 MongoDB 做最擅长的事情 足够好的性能 更快速的开发支持 Schema Free 地理位置索引 http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 多媒体应用

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号