数据库caching或文件caching?

想象一下,要caching网页的networking系统, 它将存储大约一千万的“米”。 我唯一需要做的是立即返回一个网页,然后从caching中,并更新/删除caching中的网页。

caching的近似大小将为250GB,我不需要在caching的内容中search。 我预计每天大约有70,000次请求/更新/删除。

问题是什么最适合,数据库或文件caching(2-sublevel目录)。 你build议把数据放在一个单独的服务器或NAS上吗?

任何帮助(和build议!)真的很感激!

阿德里安

为了保持caching,您需要能够根据URL和年龄来定位项目(后者用于清除LRU文件)。 因此,使用原始文件将不得不维护一个额外的索引或多个链接到实际的数据文件。 您还需要在整个目录中平均分配文件以保持检索内容的效率 – 例如,您可以使用URL的md5哈希来生成内容文件/元数据的path。

所以,尽pipe数据库访问速度会比较慢,但它确实简化了元数据的pipe理。 这并不是说实际的内容仍然可以驻留在文件中 – 在数据库中存储大型,可变长度的Blob常常比普通文件效率低。

另一件需要考虑的事情是如何处理更新 – 如何实现更新取决于你如何实现代理服务器 – 作为一个从inetd,分叉或线程服务器或单线程服务器运行的STDIO服务器。 除了单线程服务器之外,可能有2个请求来自本地caching中不可用的相同内容可能正在同时处理 – 但是您只希望代理一次引用来源。 在后端使用DBMS允许您在锁处理/并发访问方面有更多的灵活性。

你build议把数据放在一个单独的服务器或NAS上

是吗? 你的意思是把代理保存在一个独立的系统上? 你为什么要这样做? 你只是增加额外的延迟访问内容。 而通过networking访问数据库文件从来就不是一个好主意。

但是,这一切都重新假设你打算编写你自己的软件。 如果你想这样做只是为了好玩(?),那么学习程序的一部分就是自己调查这些问题 – 并testing不同的方法 – 询问别人如何写它不会帮助你了解这些问题。 OTOH如果你只是需要解决这个问题,为什么不使用其中一个可用的开源软件包 – 鱿鱼是非常好的。