应该选哪个 Mongo 云数据库?

2012-12-01 22:25:57 +08:00
 remaerd
正在烦恼选择使用哪个的云数据库。软件已经决定使用 MongoDB 了,主要因为 REST API 接口能够减少很多很多不必要的麻烦。MongoHQ 还有 MongoLab 都是部署在 AWS 上面的,总觉得在中国的访问速度可能比较慢。除了盛大云提供 Mongo,中国有没有其他 MongoDB 云数据库服务?
7310 次点击
所在节点    云计算
15 条回复
kenneth
2012-12-01 22:28:18 +08:00
盛大云,贵所以垃圾。推荐appfog,可以去看看,免费。
remaerd
2012-12-01 22:37:32 +08:00
@kenneth 我现在就在用 AppFog + MongoLab 的办法。Web 客户端通过 NodeJS 的 Mongo ODM 访问数据库。然后 iOS 客户端直接使用 MongoLab 的 REST API。
我主要是担心数据访问速度问题,如果数据库在 AWS,是否有什么办法加速在中国的访问速度?
eric
2012-12-01 22:53:10 +08:00
@remaerd 如果应用(AppFog)和数据库(MongoLab)都在 AWS 的同一个 region,后端数据访问速度根本不会成为瓶颈,把前端优化做好在上个 CDN 问题一般就能解决一大半了。

如果应用在 US East 而数据库在国内那才是杯具:来自国内的请求会到 US East 的应用那里,然后又得在美帝和景德镇的数据库之间往返多次,最后再从美帝发回相应,已经能绕地球几圈了。
lonelybug
2012-12-02 00:02:30 +08:00
Mongodb一开始我准备采用,后来发现多少有些不成熟,他没有自己的内存管理机制,完全依靠系统的虚拟内存来映射,也就是说你如果删除记录的话,你内存的占有量不会减少,只是回标记可用。

而对于一些需要Aggregate的数据集合处理,他还没又提供足够好的机制,目前的运行javascript来MapReduce对于很多场景来说都很难。

你要想好了。成熟的MySQL还是没什么问题的,尝试新技术的代价是不小的,你最好准备好一套应急备份机制。
remaerd
2012-12-02 00:39:55 +08:00
@eric 谢谢,我现在的确是用你的方法做的,AppFog 和 MongoLab 都是选择 US East,而且也没有遇到什么难题(就是 MongoLab 的后台访问有一点难度)。我只是在想,这个是不是最好的解决方案?数据库的访问速度可不可以有更优的解决方案?这些问题。

@lonelybug 我不像您一样,对数据库有很深的了解,所以对我来说,或许购买云数据库,就不需要担心你说到的这些问题了。MySQL 没有提供 REST API,这意味着我需要另外为 iOS 客户端访问数据而准备一堆代码,我是 Solo 的,所以这对我而言是一个比较好的解决办法。谢谢你的意见,Anyway。
lonelybug
2012-12-02 00:47:07 +08:00
你用ios上的代码直接访问数据库?如果是的话。即便是restful也是很危险的。而且你之后的优化和应急处理很可能会非常痛苦。我建议你至少用http方式来让ios和你后应用层通信。至少灵活性提升不少对你日后维护也方便很多。
remaerd
2012-12-02 12:38:47 +08:00
@lonelybug 你的意见是,我的 iOS 需要访问数据,不可以使用 Mongo 提供的 API,必须自行用 NodeJS 写一套 API 吗?Web 端的话,就是完全通过 NodeJS 写的后端访问数据库的,但为了节省途径流量, iOS 端是通过 MongoDB 提供的 REST API 直接访问数据库的。

因为我的项目比较特殊,iOS 端并不需要对数据库进行 Write 操作,大部分 Write 都是 Web 端的事情,所以我可以提供一个只读的 Key,让 iOS 端通过这个端口读取数据,这样就避免了黑客获得 Key,然后直接对数据库进行 Write 操作。

因为经验不足,无法想象优化和应急处理方面我能遇到什么样的困难。如果您能够花时间跟我说说就太好了。我也想知道一下这方面的资讯。

谢谢。
remaerd
2012-12-02 12:54:06 +08:00
@lonelybug 经你提醒,现在才发现原来 REST API 的 Key 只能有一个,不能单独生成一个只读的 API Key,太恐怖了。看来我得重新考虑了。
hepochen
2012-12-02 19:22:34 +08:00
@remaerd RESTful也还是在程序员自己的掌控范围内,对于任何的key的处理,都在你自己的控制范围之内。

如果只读性比较多的话,并且项目并不是很大的话,可以考虑试试 https://www.parse.com/

AWS的话,选中东京节点,其实速度还可以的,特别是api性质的口子,这个速度足够足够了。

如果直接使用Mongodb提供的REST API,注意隔离敏感性信息就可以了,最好是完全隔离读写的权限;如果给普通的用户写的权利,务必让他只写到一些扩展的document中,并且注意容错。
lonelybug
2012-12-02 23:09:50 +08:00
你如果已经有Web层的东西来提供数据读写的话,你可以直接用iOS NSURLConnection产生HTTP的POST或者GET来访问你的web层的数据接口。

比如,你有一个API的地址是http://www.YourWebSite.com/list_user,然后这个返回得失XML或者JSON。你就可以直接在iOS里面解析返回内容来达到访问。当然,如果你的设计有很好的分离UI和业务逻辑那么这个地址同样也可以用HTML里面的javascript进行访问然后解析内容。

但是至少iOS直接访问数据库是一件非常危险的事情!
remaerd
2012-12-03 00:58:25 +08:00
@lonelybug 已经参考你的想法,Web 端 和 iOS 客户端都统一使用一套 REST API 来访问数据了。

@hepochen 之前我的项目就打算用 Stackmob 或者 Parse。不过到最后因为项目需要特殊的接口,两者满足不了,所以只好自学做出来了。今天早上发现使用 MongoHQ 之类的提供的 REST API 的话,只要有 API Key,黑客可以完整删掉整个数据库。所以现在已经决定不用这个办法了。
lonelybug
2012-12-03 01:00:20 +08:00
@remaerd 好,祝你软件成功。哈哈。
lonelybug
2012-12-03 01:11:09 +08:00
@remaerd 我看了一下你的twitter,你是美术设计?
remaerd
2012-12-03 02:02:27 +08:00
@lonelybug 之前是学了一些美术,正在独立开发一个项目。你应该人不在大陆?这么晚上线。项目做到一定程度了,邀请你测试测试。
lonelybug
2012-12-03 04:02:37 +08:00
@remaerd 是没在大陆,哈哈。你这么晚难道也不在大陆?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/53850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX