所以,直接回答问题…
Shall we chose mongodb if half of data is schemaless, and is being stored as JSON if using MySQL?
无数存储空间肯定是MongoDB的一个引人注目的理由,但正如您所指出的,将JSON存储在RDBMS中也是相当容易的。 MongoDB背后的强大功能是对无法存储的丰富查询。
如果我可以在更新JSON字段的图示中指出一个小缺陷,那不仅仅是获取当前值,更新文档,然后将其推回到数据库。该进程必须全部包装在事务中。在您开始对数据库进行非规范化之前,事务往往相当简单。然后像录制upvote一样简单的东西可以锁定桌面在你的架构上。
使用MongoDB,没有交易。但操作几乎总是可以以允许进行原子更新的方式进行结构化。这通常涉及SQL范例的一些戏剧性变化,但是在我看来,一旦你停止试图强制将对象强制放入表中,它们就会相当明显。至少,其他许多人遇到了同样的问题,蒙古社区往往对于克服的挑战来说是相当公开和有声的。
Some of the data like main posts is critical , so it will be saved using safe writes , the counters etc will be saved using unsafe writes. Is this policy based on importance of data, and write intensiveness correct?
通过“安全写入”,我认为您的意思是在每次写入后打开自动“getLastError()”的选项。我们在DBCollection上有一个非常薄的包装,允许我们在调用getLastError()时进行细粒度的控制。但是,我们的策略不是基于“重要”数据,而是跟随查询的代码是否期望在以下读取中立即显示任何修改。
一般来说,这仍然是一个糟糕的指标,我们已经转而使用findAndModify()来执行相同的行为。在我们仍然显式调用getLastError()的情况下,当数据库可能拒绝写入时,例如当我们使用可能是重复的_id来插入()时。
How easy is it to monitor,backup and restore Mongodb as compared to mysql? We need to plan periodic backups (say daily), and restore them with ease in case of disaster. What are the best options I have with mongoDb to make it a safe bet for the application?
恐怕我不能说我们的备份/还原策略是否有效,因为我们还没有恢复。我们遵循MongoDB的备份建议; @ mark-hillick做了很好的总结。我们正在使用副本集,我们已经迁移了MongoDB版本以及引入了新的副本成员。到目前为止,我们没有停机,所以我不知道我能说得好。
Stability,backup,snapshots,restoring,wider adoption i.e.database durability are the reasons pointing me to use MySQL as RDBMS+NoSql even though a NoSQL document storage could serve my purpose better.
因此,根据我的经验,MongoDB提供了无量纲数据存储,其中包含一组足够多的查询原语,以便事务经常被原子操作所取代。不了解十年价值的SQL经验是非常困难的,但我遇到的每一个问题已经被社区或10gen直接解决了。我们没有丢失数据或有任何停机时间,我可以记得。
简单来说,MongoDB是在查询,维护,可扩展性和可靠性方面所使用的最佳数据存储生态系统。除非我有一个非常清楚的关系的应用程序,否则我无法善意地使用除SQL之外的任何东西,我将尽一切努力使用MongoDB。
我不为10gen工作,但我非常感谢那些做的人。