Реализация менеджера персистентности на стороне клиента в переполнении стека

У меня есть двухуровневое приложение (тяжелый клиент, написанный на C ++, который подключается к объектно-ориентированной базе данных). Сама база данных InterSystems Cache ‘, и это на самом деле и то и другое база данных и сервер приложений (Cache» также MUMPS переводчик).

Из соображений производительности я хочу разработать клиентскую часть кэш (или, в более общем менеджер персистентности).

InterSystems Cache ‘ действительно имеет «быстрые» интерфейсы, такие как ODBC / JDBC, но я имею дело с большим количеством устаревшего клиентского кода, который уже используется Привязка объекта на века. Поэтому я не могу изменить архитектуру клиента, но должен сделать протокол быстрее. Сам протокол изначально очень verbose: все имена классов / методов / свойств передаются дословно, поэтому, например, создание единого объекта на стороне сервера «стоит» мне трафика в 50 тыс.

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

  1. создавать и удалять объекты,
  2. читать и обновлять свойства, и
  3. вызывать методы.

Здесь важно то, что при вызове метода на стороне сервера обычно выполняется код, природа которого неизвестна клиенту. Поскольку этот код может потенциально изменить состояние объектов в базе данных, кэш на стороне клиента может потребоваться сделать недействительным после вызова метода. Это отличается от обычного CRUD операции, в которых клиент может отслеживать изменения, внесенные в объекты, и соответствующим образом обновлять кэш.

Вопросы:

  1. На какие менеджеры Java-персистентности стоит обратить внимание, чтобы я мог принять идею и заново изобрести колесо? Я думал о J2EE бобы сущностей, JPA, и сетки в памяти, как слаженность.
  2. Какие менеджеры персистентности C ++ могут быть адаптированы для использования InterSystems API? В частности, являются Буферы протокола подходит для моей задачи?
  3. Какие методы можно использовать для «сжатия» протокола, который изначально очень многословен на проводе? Мой первый вызов — сжатие ZIP-файлов трафика и хэширование (кодирование) имен классов / методов / свойств (так, чтобы TLV структура, содержащая целые числа вместо имен, передается по сети). Есть другие идеи?
  4. Какое чтение по шаблонам предприятия (особенно в C ++) применимо в моем случае?

2

Решение

ORM Framework (Wt :: Dbo), кажется, делает эту работу:

http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html

Wt Похоже, очень интересный инструмент для реализации современного веб-приложения на C ++.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]