32
Глава 1.
Оценка
Код валюты
Название валюты
Доля
EUR
Евро
41,3
USD
Доллар США
24,3
JPY
Японская йена
13,6
�BP
Английский
фунт стерлингов
11,1
CHF
Швейцарский франк
2,6
HKD
Гонконгский
доллар
2,1
SEK
Шведская крона
1,1
AUD
Австралийский доллар
0,7
S�D
Сингапурский доллар
0,5
Общая доля главных валют равна 97,3% . Я добавил оставшиеся 2,7%
случайно выбранными валютами из 170 записанных валют (включая
главные валюты для этого конкретного банка) .
В результате мы не только вызываем функцию AboveThreshold() сотни ты-
сяч раз, но и сама эта функция вызывает те же строки из таблицы пре-
делов . Вы можете подумать, что поскольку эти несколько строк будут,
вероятно, храниться в кэше сервера базы данных, это не имеет большо-
го значения . Но это на самом деле не так, и я продемонстрирую степень
влияния этих неэффективных вызовов, переписав функцию более эф-
фективным образом .
Я назвал новую версию программы
ThirdExample.java . В ней я исполь-
зовал для хранения данных некоторые специфичные коллекции языка
Java – HashMaps . В этих коллекциях хранятся пары ключ-значение, а хе-
ширование ключа позволяет получить индекс массива, сообщающий,
куда пара должна идти . В других языках можно было бы использовать
массивы . Но идея заключается в том, чтобы избегать запросов к базе дан-
ных, используя пространство памяти процесса как кэш . Когда какие-то
данные запрашиваются первый раз, их получают из базы данных и сохра-
няют в коллекции, прежде чем вернуть значение вызывающей функции .
Следующий раз, когда я запрашиваю те же самые данные, я нахожу их
в моем маленьком локальном кэше и возвращаю почти мгновенно . Два
обстоятельства позволяют кэшировать данные:
• Поскольку эта программа не из реальной практики, и я знаю, что
если буду повторно запрашивать значения предела для данной ва-
люты, то буду каждый раз получать одно и то же значение: измене-
ний между вызовами не будет .
• Я имею дело с
небольшим количеством данных,
поэтому не буду
хранить гигабайты их в кэше . Требования к памяти – важный мо-
мент, который надо учитывать, если возможна ситуация с большим
количеством конкурирующих сессий .