我们需要一种缓存解决方案,它基本上根据用户首选项和标准将数据(文本文件)缓存在3天到一周的任何地方。在这种情况下,基于内存的缓存对我们没有意义。我们被称为MemcacheDB,但我也想到了一些没有SQL的解决方案。
我们当前的应用程序使用RDMS(MYSQL),我认为使用MemcacheDB是有意义的,但是NOSQL确实具有吸引力,因为它是更多的东西。但是,我们还没有在NOSQL下部署生产级应用程序,并且测试版的内容与管理层/投资者的关系并不理想。您有什么想法以及如何解决它?
谢谢
答案 0 :(得分:4)
CouchDB和MongoDB都是很棒的数据库,但它们是现有RDBMS之上缓存层的可怕选择。除了他们仍然相当不成熟的事实,他们根本不适合这个目的。另外,速度方面,如果没有缓存层,使用CouchDB或MongoDB会更好 - 它们对于简单的读/写操作都比MySQL慢。是的,NoSQL数据库是“酷”的,但这并不意味着你应该将它们用于他们不应该做的事情。
我会选择Memcached,因为它只是你能找到的最快最轻的东西,而且它是众所周知且得到很好的支持。
答案 1 :(得分:2)
如果您担心对管理层和投资者的吸引力,以及当前的系统(您提到MySQL)有效,您为什么要改变?您正在从一个相当稳定的项目转向仍处于测试阶段的项目,如果当前系统已经运行,您还要增加什么价值呢?
答案 2 :(得分:1)
如上所述,所有CouchDB资源都包含etags。
未提及的是您可以将任何 HTTP缓存解决方案放在CouchDB之前,并让它进行基于etag的缓存。这样你就可以使用Varnish,nginx,无论你想要什么。
答案 3 :(得分:0)
我还要看看卡桑德拉(http://cassandra.apache.org/)。我已经尝试过MemcacheDB和CouchDB,不知何故发现Cassandra更具吸引力(因为我使用Coldfusion而不知道PHP)。这是相关的问题Cassandra PHP module
答案 4 :(得分:0)
CouchDB已经进行了一些缓存:当您获得文档时,服务器也会发送HTTP ETag标头(它与CouchDB中的文档修订版相同)。
下次浏览器要求输入相同的文件时,它会发送收到的Etag。如果文档尚未被修改,则服务器将使用HTTP代码304 Not Modified进行响应,并且您的浏览器将从其本地缓存中检索文档。
但是,如果必须根据用户首选项缓存文件不同的时间,即使文本文件发生更改,可能最好的选择是编写自定义代码,根据用户首选项发送适当的HTTP缓存标头。
为了完整性,另一个好的选择是Redis。您可以获得与Memcache相媲美的性能,但Redis还支持各种数据结构(哈希,列表,集合,有序集)和原子操作。
答案 5 :(得分:0)
如果你使用持久性memcached,你应该看看Redis。它具有所有memecached功能(以及更多)和持久性。
我自己没有尝试过,但我确实记得读过Redis也支持memcached API。