【问题标题】:Table schema for IP Address LookupsIP 地址查找的表架构
【发布时间】:2013-02-27 10:03:14
【问题描述】:

我正在做一个项目,我们需要在其中做IP Address lookups。因此,为此我们已经获得了数据集,现在下一步是将这些数据集填充到表中。然后进行一些接受IP Address as an input 的服务设置,然后在IP Address 上查找数据库。所以下面是数据集的样子-

ip_address      country region  city           metro-code   latitude    longitude   postal-code   country-code   region-code    city-code   continent-code  country-code

24.32.116.116   usa       tx    clarksville    623           33.6103    -95.0498    75426            840           44             34918            6            us
65.29.108.232   usa       mi    novi           505           42.4637    -83.4604    48375            840           23             4339             6            us
66.169.99.69    usa       tx    ft worth       623           32.7016    -97.3823    76109            840           44             771              6            us
72.70.100.111   usa       ma    peabody        506           42.5332    -70.9726    1960             840           22             1392             6            us
174.252.116.137 usa       va    oakton         511           38.8892    -77.3222    22124            840           47             3860             6            us
68.55.144.242   usa       md    pasadena       512           39.1276    -76.5125    21122            840           21             4358             6            us
174.252.83.27   usa       pa    lancaster      566           40.0459    -76.3542    17603            840           39             333              6            us
174.78.192.31   usa       ga    warner robins  503           32.5958    -83.6384    31088            840           11             5052             6            us
98.192.146.235  usa       fl    panama city    656           30.1804    -85.5598    32404            840           10             671              6            us
71.192.181.20   usa       ma    springfield    543           42.1187    -72.5483    1109             840           22             967              6            us
76.183.54.227   usa       tx    dallas         623           32.7202    -96.6769    75217            840           44             77               6            us
69.62.143.140   usa       ca    granite bay    862           38.7442    -121.191    95746            840           5              49451            6            us
69.142.76.32    usa       nj    penns grove    504           39.707     -75.4467    8069             840           31             2335             6            us
70.173.54.93    usa       nv    las vegas      839           36.2059    -115.225    89108            840           29             173              6            us
98.242.8.222    usa       ca    fresno         866           36.7968    -119.883    93722            840           5              19               6            us

问题陈述:-

我们预计IP Address lookup 每天的流量约为100 Millions calls

这个数据集将是全球数据集,对所有国家都有意义。我们计划将这些数据集存储在MySql database 中,这里是In Memory Database

现在我的问题是我应该只使用上述列创建一个single table 吗?或者我应该将上表标准化为两个或三个?如果有的话,我是否需要在任何列上创建索引?

基本上我想知道我应该如何设置这个表的架构,这样查找就不会花费太多时间来处理我们预期的流量。我们将进行查找的服务应该非常快地返回响应。

【问题讨论】:

  • 除了通话次数(每天 1 亿次?真的吗?)。您打算存储多少个 IP?全部 4+ 十亿?因为这也是一个挑战。
  • 是的,这是我们现有服务的当前流量。我不知道是否会有 40 亿个 IP。因为我要从one of the Geolocation Data Provider like Maxmind 获得这个地理位置数据集。当我问他们数据集的大小时。他们说大约 40GB。
  • 要直接回答您的问题,您肯定需要索引。但就性能而言,我认为单表或多表都不是一个好的解决方案
  • 我明白了。那我应该看看什么数据库呢?
  • 我同意@Recurse 发布的答案

标签: mysql database geolocation ip-address lookup


【解决方案1】:

根据您的数据,我会说您看到 3-5k/s 的峰值,超过 40GB。假设你感兴趣的查询是IP->record,我建议不要直接对mysql运行。

如果我设计您的系统,我会计划:

  1. 一个面向文档的存储,用于存储/提供来自数据提供者的原始数据。 Tokyo-cabinet、Cassandra 或 HBase 之一在这里会很好。

  2. 一个完全规范化(可能是星型模式)的 mysql 实例,用于规范化数据以用于 QA 目的。

  3. memcached 或类似的分布式内存记录缓存,通过轻量级 Web 服务器 shim 提供数据。

QA 后数据可以直接从 mysql 或存储在 doc-store 中的“干净”属性提供给缓存。后者可能更可取,除非您可能需要对存储执行常规的即席相关查询,在这种情况下,您最好将时间和服务器资源专用于 mysql。

坦率地说,您不希望每个事务都执行数据库查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2012-11-17
    • 2012-09-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多