Мне нужен совет по сохранению объектов Java без необходимости сопоставления базы данных. Говоря простыми (и глупыми) словами, я хочу иметь JPA, но меня не беспокоят детали структуры базы данных: таблицы, столбцы, ключи. В идеале я хотел бы просто определить классы Java, создавать экземпляры объектов и сохранять/извлекать эти объекты и их ассоциации без необходимости повторять информацию о сущностях/свойствах где-либо еще. Я знаю, что существуют различные виды баз данных NOSQL, баз данных документов, хранилищ значений ключей и т. д., но у меня почти нулевой опыт работы с чем-либо, кроме разновидностей СУБД, и, просто читая описания и руководства Cassandra, BerkeleyDB, MongoDB и т. д., я даже не могу судить, поддерживают ли они мои варианты использования или нет ;( Итак, вот мои требования:
Я собираюсь использовать Java-программирование язык, поэтому было бы неплохо, если бы
существовало несколько JAR-файлов с API для доступа к базе данных.
Моя главная цель - избежать необходимости определения сопоставления объектов с таблицами, поскольку я считаю это излишним и считаю определение типа единственным необходимым источником метаданных для постоянства. Все, что больше, - это слишком много, возможно, за исключением некоторых свойств для тонкой настройки (конвертеры, временные поля и т. д.). Итак, если есть какое-то решение на основе JPA/RDBMS, которое могло бы помочь. позвольте мне вообще не касаться схемы базы данных, я так понимаю.
Графы объектов в моем приложении будут иметь множество отношений, не будет логического объекта верхнего уровня, который объединяет другие подобъекты как полностью содержащиеся свойства. Напротив, моя модель содержит довольно много классов верхнего уровня, на которые будут более или менее напрямую ссылаться другие типы с ассоциациями «один-ко-многим» и «многие-ко-многим». По этой причине я предполагаю, что. полуструктурное хранилище на основе документов и JSON (CouchDB, MongoDB) не подойдет моим потребностям, так как я не смог найти способ легко выразить отношения между объектами (т.е. документами), кроме агрегации. Или я просто ошибаюсь.
Количество сохраняемых объектов будет «средним», т. е. нет необходимости в особой масштабируемости, функциях обработки больших данных и т. д. Я бы оценил количество объектов. как сотни тысяч.
Мне нужно, чтобы хранилище было транзакционным, с механизмами фиксации успеха/отката или эквивалентными.
Эволюция схемы не должна требовать каких-либо операций с базовой схемой хранилища. Поэтому, когда моя модель меняется, все, что я хочу сделать, это получить объект, изменить/пересчитать свойства и сохранить измененный объект. Нет необходимости изменять какие-либо таблицы, столбцы и т. д.
Мне нужно будет выполнить некоторые запросы на основе свойств объекта. Не совсем так. сложные, с обычными реляционными операторами, но, возможно, и с соединениями ( FROM Book b WHERE b.price < :allowedPrice AND b.author=:author).
Поскольку он будет использоваться в моем хобби, который в конечном итоге станет коммерческим проектом, я бы хотел, чтобы он был бесплатным для коммерческого использования (в идеале) или с каким-либо неограничительным лицензированием до тех пор, пока он будет использоваться в нерабочее время (и это может быть возраст).
На самом деле из того, что я прочитал, кажется, что какая-то объектная база данных будет лучшим выбором для меня, например DB4O или ObjectDB. К сожалению, DB4O мертва, и лицензия на ObjectDB кажется мне слишком требовательной. Возможно, есть некоторые возможности, о которых я не знаю, чтобы выполнить вышеуказанные требования с помощью чего-то другого, какого-либо решения NoSQL или какого-либо набора инструментов. «обычная» СУБД.
Мне нужен совет по сохранению объектов Java без необходимости сопоставления базы данных. Говоря простыми (и глупыми) словами, я хочу иметь JPA, но меня не беспокоят детали структуры базы данных: таблицы, столбцы, ключи. В идеале я хотел бы просто определить классы Java, создавать экземпляры объектов и сохранять/извлекать эти объекты и их ассоциации без необходимости повторять информацию о сущностях/свойствах где-либо еще. Я знаю, что существуют различные виды баз данных NOSQL, баз данных документов, хранилищ значений ключей и т. д., но у меня почти нулевой опыт работы с чем-либо, кроме разновидностей СУБД, и, просто читая описания и руководства Cassandra, BerkeleyDB, MongoDB и т. д., я даже не могу судить, поддерживают ли они мои варианты использования или нет ;( Итак, вот мои требования:
[list] [*]Я собираюсь использовать Java-программирование язык, поэтому было бы неплохо, если бы существовало несколько JAR-файлов с API для доступа к базе данных. [*]Моя главная цель - избежать необходимости определения сопоставления объектов с таблицами, поскольку я считаю это излишним и считаю определение типа единственным необходимым источником метаданных для постоянства. Все, что больше, - это слишком много, возможно, за исключением некоторых свойств для тонкой настройки (конвертеры, временные поля и т. д.). Итак, если есть какое-то решение на основе JPA/RDBMS, которое могло бы помочь. позвольте мне вообще не касаться схемы базы данных, я так понимаю. [*]Графы объектов в моем приложении будут иметь множество отношений, не будет логического объекта верхнего уровня, который объединяет другие подобъекты как полностью содержащиеся свойства. Напротив, моя модель содержит довольно много классов верхнего уровня, на которые будут более или менее напрямую ссылаться другие типы с ассоциациями «один-ко-многим» и «многие-ко-многим». По этой причине я предполагаю, что. полуструктурное хранилище на основе документов и JSON (CouchDB, MongoDB) не подойдет моим потребностям, так как я не смог найти способ легко выразить отношения между объектами (т.е. документами), кроме агрегации. Или я просто ошибаюсь. [*]Количество сохраняемых объектов будет «средним», т. е. нет необходимости в особой масштабируемости, функциях обработки больших данных и т. д. Я бы оценил количество объектов. как сотни тысяч. [*]Мне нужно, чтобы хранилище было транзакционным, с механизмами фиксации успеха/отката или эквивалентными. [*]Эволюция схемы не должна требовать каких-либо операций с базовой схемой хранилища. Поэтому, когда моя модель меняется, все, что я хочу сделать, это получить объект, изменить/пересчитать свойства и сохранить измененный объект. Нет необходимости изменять какие-либо таблицы, столбцы и т. д. [*]Мне нужно будет выполнить некоторые запросы на основе свойств объекта. Не совсем так. сложные, с обычными реляционными операторами, но, возможно, и с соединениями ( FROM Book b WHERE b.price < :allowedPrice AND b.author=:author). [*]Поскольку он будет использоваться в моем хобби, который в конечном итоге станет коммерческим проектом, я бы хотел, чтобы он был бесплатным для коммерческого использования (в идеале) или с каким-либо неограничительным лицензированием до тех пор, пока он будет использоваться в нерабочее время (и это может быть возраст). [/list]
На самом деле из того, что я прочитал, кажется, что какая-то объектная база данных будет лучшим выбором для меня, например DB4O или ObjectDB. К сожалению, DB4O мертва, и лицензия на ObjectDB кажется мне слишком требовательной. Возможно, есть некоторые возможности, о которых я не знаю, чтобы выполнить вышеуказанные требования с помощью чего-то другого, какого-либо решения NoSQL или какого-либо набора инструментов. «обычная» СУБД.