Pull to refresh

Волшебный кэширующий декоратор

Reading time3 min
Views4.6K
Сейчас работаю над доработкой/переписыванием проекта, который был написан, ну скажем так, «не совсем грамотно». По ходу есть задача оптимизировать работу, т.к. код изначально был написан крайне неоптимально. Среди работ по оптимизации прикручивается кэш.

В проекте есть несколько разных источников данных, результаты работы которых хорошо было бы кэшировать, основной — конечно БД. Хотелось решения прозрачного, с минимальной кровью. В один прекрасный момент надоедает писать конструкции вида

$query = "Select something";
$result = $cache->get($query, $tag);
if (!$result) {
    $result = $db->queryAll($query);
    $cache->set($query, $tag);
}

И хочется чего-то другого. Конечно, код можно вынести в отдельную функцию или метод, но это как-то скучно и к тому же, для каждого разного вызова (а там есть не только $db->queryAll, а несколько разных вариантов) нужен будет свой код и своя функция/метод.

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

В общем, хотелось единого, универсального решения, которое бы подошло для разных источников данных, с разными интерфейсами, но в то же время было единообразным. Было решено сделать «волшебный» декоратор.

Читать дальше →
Total votes 60: ↑40 and ↓20+20
Comments45

Кеширование изображений на SD карте

Reading time3 min
Views9.6K
Совсем недавно пользователь sly2m описал свой метод сохранения изображений из ImageView на SD карту телефона. Кто-то (лично я например) ожидал от этого поста нечто иное, а именно:

1. Работа с изображениями из Интернета
2. Автоматическая загрузка и сохранение таких изображений
3. Продвинутое кеширование изображений

Если заинтересовало — прошу взглянуть.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments26

Hibernate cache

Reading time6 min
Views178K
Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Не много людей реально понимают как работает кеш под капотом, добавить просто аннотацию не всегда достаточно, нужно понимать как работает система. Поэтому этой статье я попытаюсь раскрыть тему про то, как работает кеш популярного ORM фреймворка. Итак, для начала немного теории.

Прежде всего Hibernate cache — это 3 уровня кеширования:
  • Кеш первого уровня (First-level cache);
  • Кеш второго уровня (Second-level cache);
  • Кеш запросов (Query cache);

Кеш первого уровня

Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код:
SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user1.setDoc(persistedDoc);

persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user2.setDoc(persistedDoc);

Возможно, Вы ожидаете, что будет выполнено 2 запроса в БД? Это не так. В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии.
Один важный момент — при использовании метода load() Hibernate не выгружает из БД данные до тех пор пока они не потребуются. Иными словами — в момент, когда осуществляется первый вызов load, мы получаем прокси объект или сами данные в случае, если данные уже были в кеше сессии. Поэтому в коде присутствует getName() чтобы 100% вытянуть данные из БД. Тут также открывается прекрасная возможность для потенциальной оптимизации. В случае прокси объекта мы можем связать два объекта не делая запрос в базу, в отличии от метода get(). При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня. Собственно, тут нечего больше добавить.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments28

Google Cache Browser — просмотр кэша без мучений

Reading time2 min
Views7.8K
Бывает так, что нужно походить по страницам сайта, который внезапно лёг или вовсе закрылся, и испокон веков нас здесь выручает Google с его поисковым кэшем. Одна беда — «походить» в этом случае превращается в сплошное мучение: посмотреть страницу, скопировать адрес ссылки, по которой хочется пройти, вставить в поисковую строку и добавить префикс «cache:». Многовато действий ради одного перехода по ссылке. Вот ссылка на решение этой проблемы для нетерпеливых: GCB 2.0.
При чем тут JavaScript?
Total votes 27: ↑26 and ↓1+25
Comments20

Конкурс студенческих проектов Intersystems Student Programming Competition 2012

Reading time2 min
Views848

InterSystems Student Programming Competition 2012!



Уважаемые хабрастуденты и хабра научные руководители!


Сессия позади! Но мы предлагаем вам не расслабляться, а поддержать интеллект в тонусе и поучаствовать в InterSystems Student Programming Competition 2012!

Принять участие может студент или студенческая команда любого ВУЗа-участника программы InterSystems Campus.
Ваш ВУЗ еще не в программе? Зарегистрируйте ВУЗ сегодня!

Регистрация команды на конкурс здесь.

Загрузить анкету участника можно здесь.
Читать дальше →
Total votes 3: ↑2 and ↓1+1
Comments0

Обновление информации в фоне

Reading time2 min
Views12K
Всем добрый день.

Недавно я задумался надо вопросом фонового обновления информации и мне пришла в голову одна идея.

Суть задачи — мы находимся на странице списка новостей. Необходимо обновлять список по мере поступления новых новостей. Серверный язык PHP
Читать дальше →
Total votes 57: ↑45 and ↓12+33
Comments60

Вышла новая версия Cache 2012.1

Reading time4 min
Views2K
Полная версия документа Release Notes Caché 2012.1. на английском языке доступна на сайте InterSystems.



Что нового:


1. iKnow — технология обработки неструктурированных данных
2. Поддержка WS-Conversation в веб-сервисах
3. Генерация HTML5 в Zen
4. Повышение производительности обработки потоков

Подробности под хабракатом
Читать дальше →
Total votes 4: ↑3 and ↓1+2
Comments0

AssetManager: как форсировать получение пользователем обновленной статики

Reading time5 min
Views19K
При разработке веб-приложений существует одна общеизвестная проблема. Мы, программисты, пишем новый javascript-код, стили в css, меняем статику… И статика эта как правило кешируется браузером пользователя и может оставаться в кеше на довольно долгое время (и это на самом деле правильно, ибо может ускорить загрузку страниц в разы).

Но что же делать, если мы поменяли статику? Как заставить пользователя сбросить кеш и обновить эти файлы? Существуют некоторые общепринятые способы, например, добавлять версионную метку к имени файла, или добавлять временную метку в GET-параметре при подключении файла.

В случае, если вы используете фреймворк Yii, вы также можете указывать версии или временные метки у файлов скриптов и стилей при подключении, однако за этим постоянно нужно следить, а в случае Yii еще и следить за отсутствием конфликтов (когда, допустим, виджет и вьюшка используют один и тот же скрипт, но с разными временными метками).
Собственно говоря, в Yii можно организовать более цивилизованный подход к этому делу.
Об этом то я и приглашаю вас почитать
Total votes 37: ↑36 and ↓1+35
Comments15

Developer Connection — новый сайт для разработчиков InterSystems

Reading time2 min
Views1.5K


Уважаемые разработчики Caché, Ensemble и DeepSee!
Компания InterSystems анонсирует выход в свет нового ресурса о технологиях InterSystems — Developer Connection!
Основная концепция ресурса — собрать на одном сайте всевозможные технические документы о технологиях InterSystems, а также разработчиков всего мира, так или иначе использующих технологии InterSystems.
Читать дальше →
Total votes 2: ↑1 and ↓10
Comments0

cache-js. функция кэширования

Reading time3 min
Views21K
Некоторое время назад возникла необходимость кэшировать ответы сервера на клиенте. Сразу оговорюсь, что я знаю про кэш браузеров, но это был не мой случай. Не долго думая я начал дополнять код для загрузки данных, что бы перед отправкой запроса на сервер, проверялось нет ли уже результата с таким запросом.
Читать дальше →
Total votes 20: ↑13 and ↓7+6
Comments8

Часть I. InterSystems GlobalsDB .Net — разведка боем с заглядыванием под капот

Reading time7 min
Views5.6K
image
Наконец-то вместо уговоров подождать еще немного, на вопрос “Есть ли InterSystems GlobalsDB/Caché Extreme под Microsoft .Net?” можно ответить утвердительно. В новой версии Caché 2012.2 (Field Test) и GlobalsDB v2012.296 появилась поддержка этой платформы.
Попытаюсь в любимом для многих разработчиков на одной шестой суши стиле, то есть без чтения install notes и прочего, исследовать, что, собственно говоря, представляет дистрибутив GlobalsDB под Windows.
Читать дальше →
Total votes 13: ↑7 and ↓6+1
Comments5

Cache + jQuery. Быстрый старт

Reading time15 min
Views13K
В статье показывается способ применения jQuery для работы с базой данных Caché, в результате чего реализуется простой функционал по вставке и удалению данных в ajax веб-приложении.

Предполагается, что читатель обладает средним уровнем знаний HTML, CSS и Javasсript и имеет минимальный опыт работы с Intersystems Cache. Загрузить последнюю версию Caché можно здесь. Начальный опыт работы с Caché можно обрести тут.
Осторожно, под катом много кода
Total votes 15: ↑8 and ↓7+1
Comments14

Еще о кэшировании в Django

Reading time6 min
Views17K
Все знают, что такое кэширование и зачем оно нужно. Посещаемость растет, нагрузка на базу данных увеличивается, и мы решаем отдавать данные из кэша. В идеальном мире, наверное, для этого будет достаточно добавить строчку USE_CACHE = True в settings.py, но пока это время не пришло, понадобится немного больше телодвижений.

Когда мы собираемся использовать кэш в Django, нужно сделать выбор: взять готовое решение, которое сделает сделает все «за кулисами», либо реализовать свое. В отличие от многих других ситуаций, тут этот выбор не так очевиден, так как в существующих на сегодня готовых решениях довольно много ограничений и потенциальных неудобств.

Сначала мы быстро рассмотрим готовые решения, а потом разберемся, как же лучше реализовать кэширование самостоятельно.
Читать дальше →
Total votes 43: ↑41 and ↓2+39
Comments14

CAT — Управление размером кэша процессора

Reading time4 min
Views9.5K
Архитекторы процессоров архитектуры x86 исторически были против предоставления программистам возможности непосредственного управления кэшем. Один как-то сказал мне в 2009 году — «никогда мы этого не сделаем, кэш всегда должен быть прозрачным для программиста». Некоторые RISC процессоры представляют архитектурную возможность управления данными/кодом, который окажется в кэше. И вот, наконец-то, нечто подобное появилось и в архитектуре x86 (начиная с Broadwell*).
Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments8

Расширение встроенной документации в СУБД Caché

Reading time2 min
Views2.9K


В СУБД Caché есть возможность встраивать свои материалы в стандартную документацию с помощью методов класса DocBook.Utils.
Таким образом можно создать собственную корпоративную документацию с возможностью удобной навигации и расширенным поиском по ней.
Читать дальше →
Total votes 2: ↑2 and ↓0+2
Comments1

Работа с объектами СУБД Caché на примере Delphi

Reading time17 min
Views11K

Несмотря на перманентные похороны Delphi, эта платформа построения Desktop приложений живёт и здравствует, а со сменой владельца даже обретает второе дыхание и продолжает оставаться основным инструментом для тысяч разработчиков во всём мире.
Как и с любыми другими СУБД, Delphi прекрасно взаимодействует с СУБД Caché.

Из Delphi можно подключиться к Caché, используя следующие интерфейсы:


В данной статье будут рассмотрены примеры использования объектного интерфейса при работе с СУБД Caché.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments5

Работа с SSL/TLS в СУБД Caché

Reading time8 min
Views4.5K
В данной статье будут рассмотрены лишь некоторые примеры установки безопасного соединения c СУБД Caché на основе SSL, а именно:

Читать дальше →
Total votes 9: ↑7 and ↓2+5
Comments0

Работа с сокетами в СУБД Caché. Пример реализации серверной части протокола WebSocket

Reading time10 min
Views4.3K
СУБД Caché для взаимодействия через TCP/IP с удалёнными процессами посредством сокетов предоставляет низкоуровневые команды, что может представлять собой сложность для новичков.

А есть ли возможность использовать сокеты «по-другому», не теряя при этом в гибкости, скорости и удобстве разработки?

Читать дальше →
Total votes 6: ↑5 and ↓1+4
Comments2

Локализация в СУБД Caché

Reading time9 min
Views5.4K
Предположим, вы написали программу, выводящую «Hello, World!», например:
  write "Hello, World!"

Приложение работает, всё хорошо.
Но проходит время, ваше приложение развивается, становится популярным и вот, вам нужно эту строку вывести уже на другом языке, причём количество и состав требуемых языков заранее неизвестен.
Под катом вы узнаете, как задача локализации решается в Caché.

Поехали!
Total votes 9: ↑5 and ↓4+1
Comments5

Каша быстрого приготовления — делаем CRUD в Caché с помощью jqGrid

Reading time10 min
Views6K
Речь пойдет о создании веб-приложения на Intersystems Caché с использованием javascript плагина для отображения табличных данных — jqGrid. Плагин часто упоминается на Хабре, поэтому основное внимание будет уделено особенностям его использования со стороны Caché
Преимущества использования jqGrid:
  • разгрузка сервера от клиентской логики
  • возможность использования различных форматов обмена данными (xml, json)
  • различные способы отображения данных (таблица, дерево, вложенные таблицы)
  • готовый функционал по изменению данных – редактирование в строках, редактирование в формах, проверка данных
  • большое количество настроек, опций и событий с документацией, примерами и исходным кодом
  • богатый пользовательский функционал — сортировка, группировка, фильтрация, поиск, итоги, настройка отображения столбцов (видимость, порядок, размеры), поддержка множества тем визуального оформления от jqueryui

Состав блюда: хранимый класс с данными, класс-страница, класс-сервис данных. Необходимые библиотеки и стили подключаются из сетей доставки данных (CDN) и с сайтов разработчиков, поэтому, для работы примера в локальной сети, их необходимо будет скачать из этих источников.

Предупреждение: пример максимально упрощен, рассматривается только малая часть возможностей плагина, но кода все равно много, хотя он и тщательно задокументирован.
Заварим кашу?
Total votes 7: ↑6 and ↓1+5
Comments9