Существуют ли какие-либо механизмы кэширования для Delphi? - PullRequest
5 голосов
/ 04 мая 2009

Вопрос: Какие структуры кэширования доступны для Delphi и насколько они развиты? Если их нет, то существует ли общепринятый способ достижения той же цели? Применимо к версиям Delphi для Win32.

Подробности вопроса: Тип фреймворка, о котором я спрашиваю, существует в основном в фреймворках веб-разработки, позволяющих пользователю:

  • Проверка кэша для ранее сохраненных данных / объекта
  • Извлечение данных / объекта
  • Сохранить новые данные / объект
  • При необходимости пометьте Data / Object и пометьте его.
  • Срок действия данных / объектов на основе некоторых критериев (метки, теги, сроки и т. Д.).

Я понимаю, что отсутствие сервисов отражения для Delphi Objects без RTTI означает, что они, вероятно, не будут существовать таким же образом, но есть ли подобный способ достижения хотя бы части того же конечного результата более Delphi-способом?

Альтернативный подход: Как альтернатива нативной библиотеке Delphi: существует ли, например, хороший набор привязок для memcached или что-то подобное?

Ответы [ 6 ]

4 голосов
/ 29 октября 2009

Клиент Delphi для Memcached можно найти в коде Google:

http://code.google.com/p/delphimemcache/

4 голосов
/ 04 мая 2009

Я использовал memcached в Linux (есть версии для Windows и MacOS, а также почти для любой другой ОС), это довольно просто.

Я имел дело с этим напрямую, используя TIDTelnet, читая документацию протокола , я использовал только set , get , delete и выйти .

Я использовал команды такого типа (я установил и получил «имя», 14 - это число байтов, которые должны быть сохранены):

osama@osama:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set name 0 0 14
Osama Alassiry
STORED
get name
VALUE name 0 14
Osama Alassiry
END
quit

memcached позволяет хранить до 1 МБ на ключ кэша, я использовал составные ключи, такие как «Person | 17 | name», «Person | 17 | picture», «Employee | 7 | Salary | Basic» (это вымышленные имена не имеет отношения к тому, что я на самом деле сделал) ... Я сохранил некоторые двоичные файлы в кэше как base64, что позволяет использовать до 768 КБ двоичных данных.

memcached также можно распределить по нескольким серверам, хэшируя ключи и выбирая один из нескольких серверов на основе их хэша.

1 голос
/ 05 мая 2009

Хорошо. Я, вероятно, в конечном итоге буду чувствовать себя глупо по этому поводу, но в чем проблема с TStringList? Я использовал динамический массив довольно структурированных данных с TStringList, чтобы найти элемент, основанный на идентификаторе строки. Недавно я обновил TStringList до THashedStringList. Это может быть немного быстрее, но пока ничего особенного. До сих пор механизм StringList / Array обеспечивал высокую производительность моего приложения.

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

1 голос
/ 04 мая 2009

Если вы хотите создать свой собственный, вы, вероятно, захотите сделать это во Freepascal, так как он имеет 64-битную поддержку. Вместо двоичных деревьев сплайнов я бы предложил k-ary.

1 голос
/ 04 мая 2009

Эти фреймворки обеспечивают некоторый способ кэширования объектов

В зависимости от ваших точных требований, они могут быть чрезмерными. Если вы попытаетесь реализовать собственное решение, я бы посоветовал вам рассмотреть различные контейнеры в Jedi VCL в качестве отправной точки.

1 голос
/ 04 мая 2009

Механизм кэширования нуждается в ручном раскатывании.

Splay Trees - это полезный и простой механизм для хранения кэшированных объектов, а также определения их устаревания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...