mysql,redis,mongo

我们业务中三个特别典型的应用为:

  1. 基于位置的移动搜索应用。我们通过使用MongoDB的地理空间索引及查询来向移动用户发送基于地理的搜索结果。用户有可能在搜索任何东西:从一个当地的饭店,到一辆车的代理权。该应用将会检测到用户的位置,然后基于距离为用户提供索索结果。在这个应用中,MongoDB每天都会处理12亿次的查询。
  2. 用户认证数据的缓存层。对于很多中国网络用户而言,奇虎是一个核心的门户网站。在登录我们的网站之后,我们的用户可以直接连接到其它许多合作网站。我们为用户提供了多重服务的单点登录(SSO),因此在浏览相关网站的过程中,用户可以不需要一直提供他们的安全认证信息。为了更快地读取,用户的单点登录会话被存储到MongoDB中。MongoDB可以支持成千上万的并行用户,每秒钟大致可以处理3万个操作以及每天支撑18亿次的查询。
  3. 日志分析平台。我们需要了解业务是否在正常运行。此外,内部业务人员也希望通过新的促销策略和活动来了解用户的参与度。为了实现上述功能,我们从Linux、Apache网页服务器以及Tomcat服务器上收集所有的日志数据,并将其直接流式传输到MongoDB中。从上述数据中,公司内部的业务人员可以使用基于PHP的商务智能(BI)平台生成实时的分析及报表。在任何时候,MongoDB中在18个分片中存储着25亿的文档,并且通过三个节点的复制集保证了实时的可获得性。MongoDB每天都会为其处理10亿次的写操作。

问:您们还使用了什么其它的数据库?

MongoDB是我们使用较多的三种数据库(MySQL,Redis,MongoDB)之一,但在一些场景中MongoDB并不适用。例如我们使用MySQL来解决关系型数据问题及一些需要事务的场景,使用Redis来解决一些高并发及缓存场景。随着时间的推移,我们已经将一些更适合MongoDB的业务从MySQL和Redis迁移到MongoDB中。

问:什么因素推动着这些迁移?

我们始终希望在每个场景中使用最适合该场景的数据库,对于某些场景下的MySQL而言,迁移的原因是我们希望提高该场景下的数据库可扩展性,例如在用户量增长到亿级的时候,在一些场景中MySQL的扩展性可能会成为瓶颈,因为作为一个关系型数据库,MySQL无法简单方便的进行扩展。

而另一些迁移是因为某些场景中的开发需求不够确定或是变更频繁,MongoDB的数据模型非常灵活。在这需求多变的场景中,我们的开发人员们使用MongoDB能够实现更快的开发迭代。

对于Redis而言,迁移的两个主要原因是:成本及灵活性。在一些QPS并不是很高的场景中,我们认为MongoDB能够满足此类需求。因为MongoDB使用磁盘存放数据,所以这对于使用内存来存放数据的Redis,迁移到MongoDB后我们能够存放更多的数据并大大降低服务器成本。此外,相对于Redis的K-V模型我们可以使用MongoDB的文档数据模型实现更多的功能。所以对于那些QPS并不是很高但数据体积很有可能快速增长的应用,我们会优先选择MongoDB。




http://www.mongoing.com/archives/715

你可能感兴趣的:(Java)