Отчетность для мультитенантного веб-приложения - PullRequest
1 голос
/ 13 июля 2009

У нас есть мультитенантное веб-приложение Enterprise, использующее Hibernate поверх MySQL. Мы используем Jasper Reports для любых отчетов, которые требуются нашим клиентам, но теперь мы также должны предлагать специальные отчеты, чтобы пользователи могли выполнять свои собственные запросы.

Как другие достигли этого?

Я думаю, что могу либо:

  1. Обеспечить полный экспорт в Excel или XML формат, в котором я гидратирую сущности так, чтобы любой @ManyToOne был заменен на toString() этой сущности. Это было бы так, что данные на самом деле имеют смысл для пользователя, а не множество идентификаторов внешних ключей.

  2. Пусть они запускают SQL для копии базы данных. Убедитесь, что каждая таблица имеет TENANT_ID, предоставьте им доступ к копия базы данных, но добавьте идентификатор к каждый запрос за кадром. Я даже мог убедиться, что в этой копии базы данных были только их данные. В некотором смысле побеждает весь мультитенантный подход.

Ответы [ 2 ]

1 голос
/ 13 июля 2009

Насколько сложными будут эти пользовательские запросы? Произвольный SQL? Или вы можете использовать HQL или Критерии (и я действительно имею в виду то, что вы позволите пользователям определять своего рода QBE в пользовательском интерфейсе, но именно вы будете создавать фактический запрос)? В последнем случае фильтры тоже могут помочь.

Я бы не стал беспокоиться о (1), если только результаты запроса не являются простыми списками. Вы можете представлять иерархии / отношения в XML, но я сомневаюсь, что ваши пользователи оценят это, поскольку им придется это обрабатывать. И подход toString () в значительной степени гарантирует обратную реакцию, потому что разные пользователи обязаны интересоваться разными визуализациями одного и того же объекта (например, если вы возвращаете список As, которые связаны с B, user1 захочет получить другой результат от B.toString ( ) затем user2).

(2) должно работать, если вам действительно нужны произвольные SQL-запросы. В зависимости от того, насколько сложна ваша база данных и сколько у вас пользователей, вы можете обойтись созданием представлений (для каждого пользователя) вместо реальных копий базы данных.

0 голосов
/ 02 февраля 2010

У меня та же проблема, и я (тяжело) думаю о реализации собственного драйвера ODBC, который «скрывает» многопользовательский режим. Ознакомьтесь с данными Direct OpenSDK ODBC ...

http://www.datadirect.com/products/odbc/index.ssp

...