Siena - это постоянный API для Java, созданный на основе Google App Engine Python Datastore, который пытается построить мост между мирами SQL и NoSQL. Он предоставляет сопоставление Java Object-DB, разработанное по шаблону ActiveRecord, которое обеспечивает простой и интуитивно понятный подход к управлению объектами Java по отношению к объектам базы данных.

Добро пожаловать в Сиенский проект!

Последняя отмеченная версия - Siena v1.0.0-b4

Siena - это постоянный API для Java, созданный на основе Google App Engine Python Datastore, который пытается построить мост между мирами SQL и NoSQL. Он предоставляет сопоставление Java Object-DB, разработанное по шаблону ActiveRecord, которое обеспечивает простой и интуитивно понятный подход к управлению объектами Java по отношению к объектам базы данных.


Где вы можете найти нас также?

  • Главный веб-сайт http://www.sienaproject.com/ но документ там не обновлен, поскольку он ссылается на старую версию 0.x Сиены.

  • Ствол кода: https://github.com/mandubian/siena/

  • У нас есть IRC канал на freenode:
    • irc сервер: irc.freenode.net:6667
    • канал: #siena
  • Вы можете связаться с главным коммиттером Сиены, используя профиль "mandubian" в Github или по этому адресу: pascal.voitot.dev@gmail.com


Сиена - это единый API со многими реализациями

  • СУБД SQL (MySQL, Postgres, H2)
  • NoSQL (на данный момент запланирована синхронизация / асинхронизация GAE и другие реализации, такие как: MongoDB, SimpleDB, HBase...)


Сиена упрощает переход между NoSQL и SQL

Сиена не предназначена для имитации своего рода Hibernate для NoSQL+SQL, поскольку это было бы бессмыслицей. В большинстве случаев модель, разработанная для SQL, может быть повторно использована в БД NoSQL и наоборот, но она не может быть оптимизирована для базы данных. Сиена не предназначена для изменения вашей модели за вашей спиной, чтобы оптимизировать ее для всех баз данных, потому что это было бы сумасшедшей работой. Сиена просто стремится построить мост между мирами NoSQL/SQL и сократить усилия, необходимые при переходе от одной базы данных к другой. Это гарантирует: * Вы можете использовать один и тот же API для всех БД. * Модель, которую вы разрабатываете для СУБД, будет работать с тем же кодом в базе данных NoSQL и наоборот. * Естественно, после миграции вы оптимизируете свою модель для новой базы данных на основе ее специфики. * Если вы хотите использовать очень специфическую функцию базы данных, вы, естественно, будете использовать низкоуровневые API, предоставляемые этой БД.


Сиена имеет жизненный цикл разработки, основанный на практических примерах использования и опыте пользователя

Сиена не пытается вписаться в силу и скрыть все конкретные технические аспекты базы данных в вашем Java-коде. Это, безусловно, было ложным и невыполненным обещанием каркасов ORM в целом: объект на самом деле не является реляционной сущностью, и SQL не может быть полностью скрыт за Java-кодом. Таким образом, ORM часто просто перемещает проблемы, которые у вас были с SQL, к проблемам, которые у вас есть с вашей платформой ORM, и, к сожалению, вы вообще не управляете своей платформой ORM, как своим SQL.

Поэтому мы пытаемся спроектировать Сиену (по крайней мере, как желаемое за действительное, потому что это не простой и точный процесс:)) через процесс, идущий от потребностей пользователя к техническим аспектам баз данных SQL / NoSQL, а не иначе. Например, при создании веб-приложения вам часто нужно разбивать страницы между сотнями сущностей на страницах 50, например. Вы действительно не заботитесь о том, как БД управляет своими смещениями записей для SQL или курсорами для GAE, вы просто хотите страницу из 50 сущностей, а затем переходите на следующую страницу и затем возвращаетесь на предыдущую страницу и т. Д. Итак, Сиена предоставляет механизм разбиения на страницы, который позволяет именно это, не царапая голову, и этот механизм имеет одинаковое поведение в SQL и NoSQL.

Как следствие, Siena - это нечто большее, чем просто API-интерфейс Object-Mapping, он похож на набор инструментов, помогающий создавать приложения на основе системы персистентности.



Сиена технический дизайн


Тонкий слой поверх низкоуровневого API БД

Siena предназначена для того, чтобы слой между вашим кодом и низкоуровневыми API-интерфейсами баз данных был как можно более тонким, чтобы сделать его эффективным и не применять много технических механизмов поверх уже сложных и законченных механизмов баз данных: * Для SQL это напрямую использует JDBC * Для GAE он напрямую использует низкоуровневое хранилище данных GAE

Самая большая часть реализаций БД Siena: * Отображение типов Java на низкоуровневые типы БД. * Бизнес-код для управления высокоуровневым механизмом, таким как разбиение на страницы или режимы без сохранения состояния и состояния.

Ядро Siena - это ОДИН jar и некоторые инструменты / модули вокруг этой библиотеки ядра.

Сиена старается быть максимально простой в своих зависимостях. В настоящее время, чтобы использовать Siena со всеми реализациями БД, вам просто нужны siena.jar и Jar DB (s) (JDBC или GAE), но больше ничего. Не существует скрытых или переходных зависимостей от других фреймворков или Jars. Таким образом, вы можете использовать Siena в простом приложении Java, в простом веб-приложении или в приложении JEE.

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

Первый модуль, разработанный для Сиены - это play-siena: веб-фреймворк Play! действительно великолепен, действительно соответствует дизайну Сиены и предоставляет очень хорошую тестовую платформу.

Сиена по умолчанию не имеет состояния (но может стать сохраненной при необходимости)

Сиена по умолчанию не имеет состояния, потому что она действительно подходит для большинства случаев, и ее можно использовать напрямую, не почесывая голову о потенциальных проблемах высвобождения ресурсов БД или фиксации чего-либо. Кроме того, без сохранения состояния гораздо проще использовать в масштабируемой и распределенной инфраструктуре, такой как GAE.

Тем не менее, теперь Сиена предлагает новый режим с сохранением состояния, чтобы иметь возможность многократно использовать ресурсы БД. Таким образом, вы можете: * создать запрос с фильтрами и заказами и использовать один и тот же запрос, сохраняя последний контекст живым. * перебирать результаты, сохраняя в памяти последнюю позицию. * так далее...

Этот режим с состоянием предоставляет некоторые интересные расширенные функции, и мы пока не знаем всех методов, которые он принесет. Siena имеет открытый исходный код и выпускается под лицензией Apache 2.0.

Сиена предоставляет асинхронный режим (пока только для GAE)

Это действительно мощный способ извлечения сущностей из базы данных. Вы создаете запрос, запускаете его, делаете что-то еще, и когда результат готов, вы получаете его. Асинхронность действительно полезна, когда вы выполняете длительные запросы и не хотите останавливать весь текущий поток во время обработки запросов.

Сиена предоставляет простой способ перехода в асинхронный режим и обратно в синхронный.