我正准备为一个项目设计一个数据库。我需要存储多种类型的数据,如视频、照片、文本、音频。我必须存储它们,通过php我必须经常查询它们。我正在做的这个项目是一个社交网络,我需要通过通知和消息来连接用户。
问题是:使用nosql db来存储数据,对于通知系统(比如mongodb和redis)或者mysql能帮助我更好地使用这种系统吗?
很抱歉我的英语,但是对于像我这样的英语初学者来说,技术性的东西是很难解释的。谢谢你们。

最佳答案

sql技术(即mysql)的问题是,通常必须将二进制文本放在blob中,而此时您已经做错了。
另外要考虑的是,无论是mongodb还是sql,文件系统访问总是比数据库访问快,但是数据库存储确实有一些优势。最终在你的网站上(如果它变得稍微流行的话),你会发现你需要一个CDN。这些类型的分发网络可能很昂贵,但是使用类似MongoDB的东西,您可以在其他区域中旋转数据的副本,并在需要时复制二进制数据(甚至TTL也希望使用CDN)。
所以这是一个需要考虑的领域,即文件系统并不是大多数时候,正确的答案是像社交网络这样的高负载站点。然而,即便是facebook本身也无法避免必须直接从文件系统中服务,正如他们所说(考虑到这篇文章已有5年历史,但我怀疑这方面已经发生了很大变化):
我们还开发了自己的专用web服务器,这些服务器经过优化,能够以尽可能少的磁盘读取来提供文件。即使有成千上万的硬盘驱动器主轴,I/O(输入/输出)仍然是一个问题,因为我们的流量是如此之高。我们的squid缓存有助于减少负载,但是squid对于我们的目的来说不够快或高效,所以我们也在编写自己的web加速器。
不过,它们确实有一个非常大的基础设施,而且很可能您更应该考虑是使用数据库存储还是使用cdn。
我个人认为你应该对内容分发网络以及其他网站如何为他们的图片服务做一些研究。你可以在谷歌上找到所有的信息。您可以专门搜索Facebook,直到最近,Facebook还在为其CDN使用Akamai。

10-06 13:26
查看更多