bash.im ithappens.me zadolba.li
4594

От сих до сих

3 ноября 2010, 16:45

Заказали как-то нам с коллегой-фрилансером оптимизацию складской программы по учёту пластиковых карт. Суть проста: на склад приходят коробки с картами, упакованными в пачки по тысяче и более штук. На каждой пачке указан диапазон номеров находящихся в ней карт. Проблема была в том, что карты добавлялись в базу о-о-очень медленно и столь же медленно списывались при отправке на точки продажи. Развозящий карты курьер рассказал, что за время обработки одной партии (два-четыре часа, учитывая миллионные тиражи и древнее складское железо) он успевал объехать несколько точек, перекусить в кафе и вернуться назад.

Открыли мы исходный код и присвистнули: неизвестный индус отечественного разлива пошёл простейшим путем. Для каждой карты создавалась отдельная запись в базе, состоящая из её номера. Немного покумекав, мы организовали хранение диапазонами. Учитывая, что номера карт уникальны и идут строго по порядку, достаточно было ввести первый и последний номер в партии, чтобы она попала в базу в виде всего двух записей. При выдаче части партии диапазон просто разбивался надвое.

К сожалению, тестовый запуск провалился: заказчик, видя, что программа одинаково моментально добавляет диапазоны в сто и в сто тысяч карт, заподозрил нас в мошенничестве и не решился на обновление.