2012-12-08 58 views
0

我即将为我正在处理的项目设计一个数据库。我需要存储多种类型的数据,如视频,照片,文字,音频。我必须通过PHP存储它们,我必须经常查询它们。我正在开发的这个项目是一个社交网络,我需要通过通知和消息来连接用户。 下面是一个问题:使用NoSQL DB来存储数据和通知系统(比如MongoDB和Redis)还是MySQL可以帮助我更好地处理这类系统? 对不起,我的英语,但技术的东西很难解释像我这样的英语初学者。感谢你们。存储多种类型数据的最佳方法

回答

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上查找信息。您可以专门搜索Facebook,直到最近,他们正在使用Akamai作为他们的CDN。

+0

真的非常感谢你提供了一个非常有说服力的答案! – steo

1

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

相关问题