Foursquare


  • 管理員

              Foursquare是一个基于位置的社交网络,允许用户通过手机“入场”获取积分和奖励。 公司自2009年成立以来迅速发展,需要以有限的工程资源有效地扩大应用范围。 随着数据的增长,foursquare作出战略决策,将场馆和签到的存储从原始关系架构迁移到MongoDB。

    问题

              最初的foursquare应用程序依赖于单个关系数据库。 使用这种关系架构,foursquare不能简单且轻松地扩展到高流量应用程序所需的许多节点。 随着公司的快速增长,它将数据分为两个节点:一个用于签入(最大数据集),另一个用于其他节点。 然而,很明显,签到手续将超出单一机器可以处理的范围,而且需要长期,可扩展的解决方案来实现foursquare的增长。

    为什么是MongoDB

              在MongoDB中,foursquare团队发现了一个解决方案,其功能不仅解决了扩展问题。

    自动分片

              Foursquare将其数据迁移到MongoDB,以利用其内置的自动分片功能。 MongoDB的自动分片分区数据库,使foursquare可以跨许多节点扩展写入。 Foursquare不需要编写自己的分片层,而是可以依靠MongoDB的自动缩放基础架构,这样可以使foursquare随着应用程序的不断发展而逐渐兴起新的节点。 这使得foursquare能够将工程资源集中在构建其应用程序而不是后端。“在应用程序或中间件层中编写我们自己的分片层似乎是很多工作。 大赢家将其外包给MongoDB的人,”foursquare的Harry Heymann说。

    地理空间索引

              除了自动分片之外,foursquare也受益于MongoDB对地理空间索引的支持,可以方便地查询基于位置的数据。

    副本集

              MongoDB的副本集通过节点的自动故障转移提供高可用性。 因为foursquare在亚马逊EC2上运行,节点可以随时失败,自动故障转移对foursquare运营团队来说是一个巨大的好处。 对于复制品集合,将会是生产危机的事件成为一个常规的操作任务。

    文件模型

              MongoDB的文档模型具有独立于json的对象,它与面向对象的编程很好地映射,这与关系数据库的模式强制表结构形成了鲜明的对比。关系模型只是“程序员们现在的想法,因为大多数工程师都是面向对象的程序员,”foursquare的Harry Heymann说。

              MongoDB允许foursquare大大简化其数据模型。 例如,将MongoDB标签直接嵌入表示场地的文档中,而不是将标签(“有wifi”,“适用于日期”,“热点”等)存储在单独的表中,并且依赖于映射表和昂贵的JOIN 这在运行时更加高效,工程师更容易理解和操纵。

              用foursquare的话来说,“MongoDB是一个实际的数据库,用于现实世界中工程师们的实际问题。MongoDB是由那些开发大规模网络应用程序的人设计的,他们希望为他们正在构建的web应用构建一个完美的数据库,[他们]正在建设和解决他们客户实际遇到的实际问题,一直到原来的1.0设计到他们今天工作的东西,他们今天在做的事情, 重新工作,因为像你这样的人 - 像这个房间里的人 - 去找他们说嘿,这里是我们有这个问题,我们认为如果你把这个功能x构建到这个数据库中,那将会使我们更简单 这就是他们喜欢做的事情,我认为在接下来的几年里,只会继续发展成一个数据库,这使得我们的工作更容易应用程序开发人员,这是非常棒的。”

    - Harry Heymann,2011年MongoNYC,foursquare领导服务器工程师


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待