在Azure Web App中,我需要高效地查询MaxMind GeoMind IP2城市数据库(由于查询量和延迟要求,我们无法使用MaxMind的其余API)。
我想知道存储数据库(二进制MMDB格式,通过官方.NET api访问)的最佳方法是什么,以便在最短的停机时间内轻松更新(我们将订阅每月更新),并且在Azure存储和事务方面仍然具有成本效益。
显然,阻止blob是一种方法,但我不确定每月的更新以及GeoIP2 api在内存中加载整个数据库的事实(我不知道这是否会对Web应用程序造成问题,如果我需要一个网络工作者来保持它,或者我需要其他东西),但实际上我还不知道文件有多大。
在大容量上保持低延迟的最经济高效的解决方案是什么?
根据API文档,您必须在文件系统中拥有可用的数据库(API对Azure存储和相关的REST API一无所知)。所以,不管你把它永久存储在哪里,你都需要把它放在某个磁盘上。
我不知道数据库的占地面积有多大,但Web应用程序、云服务(网络/工作者角色)和虚拟机(无论是Linux还是Windows)都有本地磁盘。并且您可以对这些磁盘进行读/写访问。因此,您需要将数据库二进制文件(或csv)从某个地方复制到本地磁盘。此时,当您初始化SDK时,您将创建一个DatabaseReader
,并将其指向本地下载的数据库文件副本。
您提到将数据库存储在blob存储中。没有什么可以阻止您这样做,只需将副本下载到本地磁盘即可。没有什么可以阻止您将多个版本存储在多个Blob中。注意:您还可以利用Azure文件存储(SMB共享)。你选择哪一个取决于你。
就最具成本效益的解决方案而言:你需要自己做定价工作,看看什么是最有效的。您还需要评估您选择的给定大小的VM/角色实例/Web应用程序的可用RAM。您在问题中提到了Web应用程序:Web应用程序实例的大小从0.5GB到14GB不等,具体取决于您选择的级别(同样,您需要对此进行评估)。