想象一下一个要缓存网页的 Web 系统;它将存储大约 1000 万个网页。我唯一需要做的就是不时从缓存中返回一个网页,并更新/删除缓存中的网页。
缓存的大小约为 250GB,我不需要搜索缓存的内容。我预计每天对缓存的请求/更新/删除约为 70,000 次。
问题是:哪个更合适,数据库还是文件缓存(2 级子目录)。您建议将数据放在单独的服务器或 NAS 上吗?
非常感谢任何帮助(和建议!)!
阿德里安
答案1
为了维护缓存,您需要能够根据 URL 和年龄(后者用于清除 LRU 文件)来定位项目。因此,使用原始文件时,您必须维护一个额外的索引或指向实际数据文件的多个链接。您还遇到了一个复杂问题,即您需要在目录中均匀分布文件以保持检索内容的效率 - 例如,您可以使用 URL 的 md5 哈希来生成内容文件/元数据的路径。
因此,尽管数据库访问速度会变慢,但它确实简化了元数据的管理。这并不是说实际内容仍可以驻留在文件中 - 在数据库中存储大型、可变长度的 blob 通常比普通文件效率低。
您需要考虑的另一件事是如何处理更新 - 如何完成更新在很大程度上取决于您如何实现代理服务器 - 作为从 inetd 运行的 STDIO 服务器、分叉或线程服务器或单线程服务器。除了单线程服务器之外,还有可能同时处理本地缓存中不可用的相同内容的 2 个请求 - 但您只希望代理引用一次源。在后端使用 DBMS 可以让您在锁处理/并发访问方面拥有更大的灵活性。
你建议把数据放在单独的服务器或 NAS 上吗
嗯?你的意思是将存储放在与代理不同的系统上?你到底为什么要这么做?你只会增加访问内容的额外延迟。访问数据库文件通过网络进行传输从来都不是一个好主意。
然而,这一切都假设你打算编写自己的软件。如果你只是为了好玩(?),那么学习编程的一部分就是自己调查这些问题——并且测试不同的方法 - 询问别人如何编写它并不能帮助你了解问题。另一方面,如果你只是需要一个问题的解决方案,为什么不使用其中一个可用的开源软件包 -乌贼非常好。