【发布时间】:2016-05-27 10:39:18
【问题描述】:
在Azure Web App 中,我需要有效地查询MaxMind GeoIP2 City Database(由于查询量和延迟要求,我们无法使用 MaxMind 的 rest API)。
我想知道存储数据库(二进制 MMDB 格式,通过 official .NET api 访问)的最佳方法是什么,以便以最少的停机时间轻松更新(我们将订阅每月更新)并且仍然具有成本效益关于 Azure 存储和事务。
显然块 blob 是要走的路,但我不确定每月更新以及 GeoIP2 api 将整个数据库加载到内存中的事实(我不知道这是否会成为 Web 应用程序的问题,如果我需要一个网络工作者来保持它或者我需要其他东西),但实际上我还不知道文件有多大。
在大容量下保持低延迟的最具成本效益的解决方案是什么?
【问题讨论】:
-
具有成本效益的解决方案将是 azure 表存储。如果您可以获得 partitionkey rowkey 组合,那么正确的延迟应该不是问题。我不确定您获得数据库的格式。如果是 csv ,我遇到了这个库,它可以轻松地将 csv 数据存储到 azure 表存储中。 blogs.msdn.microsoft.com/jmstall/2012/08/03/…
-
@Aravind - 我看不到表存储如何解决存储二进制数据库文件的问题。我认为问题不在于将内容从一种格式转换为另一种格式。即使使用 csv 版本,您仍然需要将数据从表存储复制回本地磁盘,以便通过 api 使用其内容。另外:表存储和 blob 存储的每 GB 成本完全相同。
-
@David 对。在任何情况下,当源向您提供更新时,您仍然必须使数据库保持最新。如果它是二进制的,那么块 blob 是选项。也不认为将整个数据库加载到内存中是一个不错的选择。
-
@Aravind - 没有选择将整个数据库加载到内存中:根据文档,这就是 SDK 的工作方式。除非 OP 分叉/修改 SDK,否则这是一个有争议的问题。
-
FWIW,API 的默认设置不是将整个数据库存储在内存中,而是使用内存映射文件。