5

我正在尝试使用 MaxMind GeoIP 数据库,我注意到 C API 提供了一堆不同的缓存模式作为GeoIP_open初始化调用的标志。

  • GEOIP_MEMORY_CACHE
  • GEOIP_CHECK_CACHE
  • GEOIP_INDEX_CACHE
  • GEOIP_MMAP_CACHE

这些是标志位,因此您可以提供其中的任何一组,但是没有关于这些标志的含义或它们的作用,或者(也许最重要的)它们如何交互的文档。

基准测试页面表明它会GEOIP_MEMORY_CACHE使其更快而GEOIP_CHECK_CACHE更慢,但没有任何迹象表明您为什么要使用(或不使用)这些标志中的任何一个。

4

1 回答 1

4

他们的 github 页面描述了这些缓存的用途。

GEOIP_STANDARD - Read database from file system. This uses the least memory.
GEOIP_MEMORY_CACHE - Load database into memory. Provides faster performance but uses more memory.
GEOIP_CHECK_CACHE - Check for updated database. If database has been updated, reload file handle and/or memory cache.
GEOIP_INDEX_CACHE - Cache only the the most frequently accessed index portion of the database, resulting in faster lookups than GEOIP_STANDARD, but less memory usage than GEOIP_MEMORY_CACHE. This is useful for larger databases such as GeoIP Organization and GeoIP City. Note: for GeoIP Country, Region and Netspeed databases, GEOIP_INDEX_CACHE is equivalent to GEOIP_MEMORY_CACHE.
GEOIP_MMAP_CACHE - Load database into mmap shared memory. MMAP is not available for 32bit Windows.

可以使用位运算符组合这些选项。例如,您可以通过调用以下命令同时使用 GEOIP_MEMORY_CACHE 和 GEOIP_CHECK_CACHE: GeoIP_open("/path/to/GeoIP.dat", GEOIP_MEMORY_CACHE | GEOIP_CHECK_CACHE);

点击了解更多信息

于 2013-08-26T20:38:46.040 回答