存储多种类型数据的最佳方式

时间:2012-12-08 11:34:00

标签: mysql sql mongodb redis database

我即将为我正在努力的项目设计一个数据库。我需要存储多种类型的数据,如视频,照片,文本,音频。我要存储它们并通过php我必须经常查询它们。我正在研究的这个项目是一个社交网络,我需要通过通知和消息来连接用户。 这里有一个问题:使用NoSQL DB来存储数据和使用通知系统(比如MongoDB和Redis)或MySQL可以帮助我使用这种系统更有帮助吗? 对不起我的英语,但对于像我这样的英语初学者来说,技术性的东西很难解释。感谢你们。

2 个答案:

答案 0 :(得分:1)

你可以去任何一种方式。但是在db中存储二进制数据通常不是最有效的路径。最好将其存储在文件系统中,并将路径放在数据库中。

答案 1 :(得分:1)

SQL技术的问题,即MySQL通常你必须将这个二进制文本放在BLOB中,此时你已经做错了。

另一件需要考虑的事情是文件系统访问总是比数据库访问更快,无论是MongoDB还是SQL,但数据库存储确实有一些优势。最终在您的网站上(如果它稍微受欢迎)你会发现你需要一个CDN。这些类型的分发网络可能成本很高,但是像MongoDB这样的东西,您可以在其他区域中旋转数据的副本,并在需要时复制二进制数据(甚至可能像CDN一样进行TTL)。

所以这是一个需要考虑的领域,文件系统不是大多数时候,对于像社交网络这样的高负载网站来说是正确的答案。然而,即使是facebook本身也不能免于必须直接从文件系统提供服务,因为他们说(https://blog.facebook.com/blog.php?post=2406207130,考虑到这篇文章是5年但我怀疑在这方面已经发生了很大变化):

  

我们还开发了自己的专用Web服务器,这些服务器经过调整,可以提供尽可能少的磁盘读取文件。即使有数千个硬盘主轴,I / O(输入/输出)仍然是一个问题,因为我们的流量非常高。我们的鱿鱼缓存有助于减少负载,但是鱿鱼对我们的目的来说不够快或不够高效,所以我们也在编写自己的网络加速器。

但是,他们确实拥有一个非常庞大的基础架构,而且您更应该考虑使用数据库存储还是使用CDN。

我个人会说你应该对内容分发网络以及其他网站如何为图像提供服务。您可以在Google上找到相关信息。您可以专门搜索直到最近才使用Akamai作为其CDN的Facebook。