我正在开展一个我们需要做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
问题陈述: -
我们预计100 Millions calls
每天IP Address lookup
周围的流量。
此数据集将是适用于所有国家/地区的全球数据集。我们计划将这些数据集存储在MySql database
In Memory Database
这里。
现在我的问题是我应该只使用上面提到的列创建single table
吗?或者我应该将上表规范化为两三个?我是否需要在任何列上创建索引。?
基本上我试图知道如何为此表设置架构,以便查找不会花费那么多时间来处理我们期望的流量。我们将进行查找的服务应该非常快速地返回响应。
答案 0 :(得分:0)
根据您的数字,我会说您正在看3-5k / s峰值,超过40GB。假设您感兴趣的查询是IP->记录,我建议不要直接针对mysql运行。
如果我设计你的系统,我会计划:
面向文档的商店,用于存储/提供数据提供者的原始数据。其中一个东京内阁,Cassandra或HBase,在这里可以做得很好。
一个完全规范化(可能是星型模式)的mysql实例,用于规范数据以实现QA目的。
一个memcached或类似的分布式内存记录缓存,通过轻量级的Web服务器垫片提供数据。
后QA数据可以直接从mysql提供给缓存,也可以从doc-store中存储的“clean”属性提供。后者可能更可取,除非您可能需要针对商店执行常规的临时相关查询,在这种情况下,您可能最好将时间和服务器资源专用于mysql。
坦率地说,您不希望每个事务执行数据库查询。