2013-03-12 2 views
0

Я работаю над проектом, в котором нам нужно сделать IP Address lookups. Поэтому для этого у нас есть наборы данных, и теперь следующие шаги - заполнить эти наборы данных в таблице. И затем выполните некоторые настройки службы, которые будут принимать IP Address as an input, а затем найдите базу данных по адресу IP Address. Так ниже набор данных будет выглядеть как-Схема таблицы для поиска по IP-адресу

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

Помимо количества звонков (100 миллионов в день? Действительно?). Сколько IP-адресов вы планируете хранить? Все 4+ миллиарда? Потому что это тоже проблема. – Cfreak

+0

Да, это текущий трафик, который у нас есть на нашем существующем сервисе. Я не знаю, будет ли 4 миллиарда IP или нет. Потому что я собираюсь получить этот набор данных геолокации от «одного из поставщиков данных географических данных, таких как Maxmind». И когда я спрашиваю их, что будет размером с наборами данных. Они сказали, что это будет около 40 ГБ. – ferhan

+0

Чтобы ответить на ваш вопрос, вам обязательно понадобятся индексы. Но одна таблица или несколько я не думаю, что MySQL будет хорошим решением для этого в любом случае с точки зрения производительности – Cfreak

ответ

0

Основываясь на ваших номерах, я бы сказал, что вы ищете пик 3-5k/s, более 40 ГБ. Предполагая, что интересующий вас запрос является IP-> записью, я рекомендую не запускать непосредственно против mysql.

Если бы я разработке системы, я бы планировал:

  1. Документально-ориентированный магазин для хранения/служат необработанные данные от поставщика данных. Один из Токио-кабинета, Кассандры или HBase, прекрасно справится с этим.

  2. Полностью нормализованный (возможно, звездный) экземпляр mysql для канонизации данных для целей QA.

  3. Кэш-память memcached или аналогичная распределенная в кэш-памяти в памяти для обслуживания данных с помощью легкой прокладки веб-сервера.

Данные после QA могут быть либо отправлены в кеш непосредственно из mysql, либо из «чистых» атрибутов, хранящихся в хранилище doc. Последнее, вероятно, предпочтительнее, если вам не потребуется выполнять регулярные специальные коррелированные запросы против магазина, и в этом случае вам может быть лучше посвятить ресурсы времени и сервера mysql.

Честно говоря, вы не хотите выполнять запрос базы данных для каждой транзакции.

Смежные вопросы