Библиотеки для хэширования / Sharding с JPA - PullRequest
6 голосов
/ 09 июня 2011

Мой отдел решил перейти на хэширование / разделение для некоторых из наших больших баз данных Oracle. Мы будем разделять наши объекты по различным схемам. Мне было поручено сделать шип, чтобы оценить пригодность различных реализаций JPA для этого.

Два вопроса, на которых я остановился, это EclipseLink и Apache OpenJPA / Slice . В прошлом мы использовали исключительно Hibernate, но Hibernate Shards находится в бета-версии и, похоже, больше не разрабатывается (последний выпуск был в 2007 году), поэтому мы не рассматриваем его.

Я буду выполнять свои собственные оценки и пробные реализации, но я не верю, что я получу хорошее представление об общем качестве этих реализаций за то время, которое мне дали. Если вы используете OpenJPA и / или EclipseLink в производственной среде, особенно если ваша база данных используется совместно, я хотел бы услышать о вашем опыте (положительном и отрицательном), вашем мнении об их общем качестве и о том, сделаете ли вы то же самое. выбор снова, если предоставляется возможность.

Ответы [ 3 ]

4 голосов
/ 09 июня 2011

OpenJPA Slice может быть одним из вариантов для приложений JPA в среде изолированной базы данных.

OpenJPA Slice доступен начиная с версии 1.2, а также поставляется с Websphere 7.0 и более поздними версиями.Основной контракт использования Slice заключается в том, чтобы сохранить точно такой же код приложения на основе JPA для работы с горизонтально разделенными фрагментами базы данных без какого-либо влияния на схему базы данных.Осколки базы данных могут быть от разных поставщиков.

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

Основным ограничением (которое типично для любой изолированной среды) является то, что модель постоянного домена должна придерживаться схемы, ограниченной деревом.По сути, учитывая экземпляр x, хранящийся в сегменте A, постоянное замыкание x, то есть набор экземпляров, прямо или косвенно достижимых из x, также должно храниться в том же сегменте A. Slice вычисляет замыкание автоматически при сохранении x.

Если приложение может жить с таким ограничением, Slice может быть подходящим вариантом.

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

Поддерживаются агрегатные операции (MAX, MIN, SUM), которые являются абелевыми / коммутативными для сегментирования.Неабелева совокупность, такая как AVG, не поддерживается.Сортировка или Top-N запросов также поддерживаются.

Дополнительную информацию о Slice можно найти по следующим ссылкам

[1] Руководство пользователя OpenJPA: http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_slice

[2] Статья IBM Developerworks: http://www.ibm.com/developerworks/java/library/os-openjpa/?ca=drs-

4 голосов
/ 09 июня 2011

Поддержка секционирования данных EclipseLink была выпущена как часть базового продукта в выпуске 2.2.

Она поддерживает секционирование Hash и некоторые другие типы секционирования (значение, диапазон), а также определенные пользователем политики.Версия 2.3 также включает в себя интегрированную поддержку Oracle RAC, UCP и WebLogic GridLink.

См. http://java -persistence-performance.blogspot.com / 2011/05 / data-partitioning-scaling-database.html

0 голосов
/ 15 июня 2011

Если вы хотите, вы можете использовать внешние инструменты, которые скрывают не только логику разбиения от разработчиков приложений, но также от пользователей BI, администраторов баз данных и т. Д. Проверьте ScaleBase

...