移动应用形态在数据库上所需的适应性改变_敬宓
需积分: 0 126 浏览量
更新于2012-04-24
收藏 1.56MB PDF 举报
标题和描述中的“移动应用形态在数据库上所需的适应性改变”这一知识点,主要探讨了随着移动应用的不断发展,特别是地理位置服务(LBS)类应用的兴起,传统的关系型数据库(RDBMS)和新兴的NoSQL数据库在面对这类应用时所面临的挑战及应对策略。街旁网的CrabDB作为解决方案之一,展现了在移动应用数据库需求上的创新实践。
### LBS应用的特点与问题
地理位置服务(LBS)应用具有以下显著特点:
- **实时性**:用户签到、位置分享等操作需要即时响应。
- **大数据量**:随着用户的增加,每天产生的签到数据量巨大。
- **数据访问模式的特殊性**:如需计算地主、积分、好友去过的地点等,这涉及到复杂的数据查询和计算。
- **性能需求**:由于数据量大且访问频繁,对数据库的性能要求极高。
- **低成本硬件**:期望能在相对低廉的硬件平台上运行良好。
这些问题对传统的关系型数据库提出了挑战,尤其是在处理大规模实时数据计算和存储方面。
### RDBMS与NoSQL的挑战
#### RDBMS的局限性
- **复杂的查询**:RDBMS虽然支持各种SQL查询,但在面对LBS应用中大量的实时计算需求时,其性能会受到限制,尤其是当需要执行复杂的聚合、排序、分组等操作时。
- **索引问题**:为了提高查询效率,需要建立大量索引,但这也增加了磁盘空间的消耗和更新时的延迟。
- **数据一致性**:强一致性的要求使得RDBMS无法进行批量或推迟计算,导致I/O操作频繁,缓存失效快。
#### NoSQL的选择与局限
以Foursquare为例,其最初选择了MongoDB,看重其Schema-Free特性、减少JOIN操作、GEO-Indices和高性能。然而,随着数据量的增长,MongoDB也暴露出不足:
- **数据膨胀**:BSON格式虽然提供了灵活性,但额外的空间开销巨大。
- **内存压力**:大数据量下,超出内存的存储需求导致高IO压力和CPU负载。
- **缓存机制**:Linux内核的mmap(2) writeback机制差异,以及OS负责的页面换入换出,难以有效控制缓存粒度。
- **数据分布**:LBS计算中对同一user_id记录的大量查询,RDBMS的Clustered Index在这方面可能更具优势。
### 街旁的CrabDB解决方案
为了解决上述问题,街旁网开发了CrabDB,这是一种专为LBS应用设计的数据库系统。CrabDB采用简单的key->list数据结构,每个地点(loc_id)对应一个用户签到列表,实现了定长存储,以减少空间开销。CrabDB支持多种查询方式,类似于MongoDB的调用接口,如`db.find()`和`db.group()`,便于开发者使用。
通过CrabDB,街旁网有效地解决了LBS应用中数据处理的瓶颈,提高了数据处理的实时性和效率,同时也展示了在移动应用数据库领域中对现有技术的创新和改进。这种针对特定场景优化的数据库设计思路,为其他移动应用开发者提供了宝贵的参考和启示。