Обратите внимание, что новости можно получать по RSS.
X
-

Информационные технологии, LiveJournal cr_it - архив

17 марта 2010, 16:34 (2808 дней назад, №8787)Непростое добавление IP диапазона
Я уже упоминал в предыдущем посте о задаче написать редактор IP диапазонов сотовых операторов (кстати, кому интересно - открытая база есть вот здесь ).

Сама по себе задача тривиальная - в БД есть две таблицы, в одной из которых перечислены (помимо различной вспомогательной информации) начальный и конечный IP диапазона и id сотового оператора, к которому относится этот диапазон. Во второй перечислены операторы с их id.

Однако, есть очень важный ньюанс. Допустим, поступила информация о новом диапазоне - стало известно, что он относится, скажем, к МТС. Конечно можно просто добавить еще одну строчку в базу, но это будет некорректно, т.к. вполне может оказаться, что там уже есть диапазон, с которым новый совпадёт или, того хуже, частично пересечётся. Даже более того - этот старый диапазон мог в прошлом быть отнесен к другому оператору (скажем, по ошибке). Также есть опасность случайно ошибиться цифрой при вводе IP и затереть таким образом половину базы. Все эти нередкие ситуации надо анализировать и обрабатывать.

В итоге я сделал примерно так:

Вызываем на сервере сервис RangeService.addRangePreview, который получает через метод checkRangeIntersect() список всех IP диапазонов, с которыми пересекается добавляемый:

SELECT ... FROM ... WHERE ... AND
(
    :ip_start BETWEEN start AND finish
    OR
    :ip_finish BETWEEN start AND finish
    OR
    start BETWEEN :ip_start AND :ip_finish
    OR
    finish BETWEEN :ip_start AND :ip_finish
)
AND NOT
( start = :ip_start AND finish = :ip_finish )


этот, полученный в виде ассоциативного массива, список диапазонов скармливается методу getRangeFutureList() , который смотрит, каким именно образом на каждый из них повлияет добавляемый диапазон.

Возможные ситуации при добавлении нового диапазонаВариантов не так много:
  • будет создан, поскольку задан как новый и с другими не пересекается
  • совпадает с новым, будет обновлён
  • полностью поглощается новым, поэтому будет удален
  • будет создан (слева), в связи с попаданием нового диапазона внутрь существующего
  • будет создан (справа), в связи с попаданием нового диапазона внутрь существующего
  • будет удален, в связи с попаданием внутрь него нового диапазона (и созданием вместо него двух новых)
  • будет урезан слева, поскольку имеет общую часть с новым диапазоном
  • будет урезан справа, поскольку имеет общую часть с новым диапазоном
  • будет создан, поскольку задан как новый и с другими не пересекается
  • будет создан, поскольку задан как новый

Таким образом, метод getRangeFutureList() возвращает массив операций, которые надо совершить и параметры удаляемых/создаваемых/изменяемых диапазонов.

Массивы пересечений и планируемых изменений возвращаются во Flex клиент, где демонстрируются наглядно в виде диаграммы и таблицы - см. рис. в начале поста. Кстати, полоски сделаны не через graphics.drawRect(), а через new Button(), чтобы можно было легко навесить на каждую полоску toolTip и сделать её кликабельной (для выдачи дополнительной информации по клику).

Далее, если пользователь согласен и нажимает "Accept", вызывается RangeService.addRangeModify и по массиву с изменениями последовательно выполняются необходимые INSERT / DELETE / UPDATE.

Опубликовано: Пётр Соболев

Случайная заметка

6697 дней назад, 00:0024 июля 1999 Paradox'99 party infofile v1.03 ( released at 24th jule 1999 ) 7,8 august, Rostov-on-Don, Russia. PC, ZX summer party. Paradox'99 invitation intro availiable at: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ftp.bfg.org/paradox/Paradox99 Rules/p99inv.zip Спонсоpы: ~~~~~~~~~ - Комиссия по молодежной политике Ростовской оpганизации "Отечество". - ЗАО "Элтес": Internet support. - Мyниципальный банк: Банк-Москвы - ...далее

Избранное

202 дня назад, 01:575 мая 2017 Часть 1: От четырёх до восьми Я люблю читать воспоминания людей, заставших первые шаги вычислительной техники в их стране. В них всегда есть какая-то романтика, причём какого она рода — сильно зависит от того, с каких компьютеров люди начали. Обычно это определяется обстоятельствами — местом работы, учёбы, а иногда и вовсе — ...далее

1707 дней назад, 00:5922 марта 2013 Прочёл тут книжку - iWoz ( ссылка ) , 2006 года. Это автобиография Стива Возняка. Похоже, что на русский её не переводили (в отличие от книг про Стива Джобса). В этой парочке, как известно, Возняк был инженером (собственно, и спроектировавшим Apple I и II), а Джобс - скорее предпринимателем. В книге есть довольно интересные ...далее

811 день назад, 23:404 сентября 2015 Небольшое видео про CC'2015 ( версия без фоновой музыки здесь: ссылка )

1179 дней назад, 03:121 сентября 2014 Мой семинар на Chaos Constructions'2014 (слайды можно в виде PDF скачать здесь: ссылка ) и несколько интервью с разными людьми: Вячеслав Славинский (svo) о Vectrex: ссылка Вячеслав Славинский (svo) о 3D Imager для Vectrex: ссылка Вячеслав Славинский (svo) о световом пере для Vectrex: ссылка ...далее