Порівняння вбудованих баз даних Java [закрито]


99

Я маю намір розробити невелику програму (Java) для управління своїми фінансами. Я вважаю, що мені потрібно використовувати вбудовану базу даних, але я не маю досвіду щодо цього питання. Я спробував розглянути деякі з доступних продуктів , але не можу вирішити, який із них буде мені більше підходить. H2 , HSQLDB , Derby та Berkeley DB здаються хорошими кандидатами, але я все ще не бачу, як вони порівнюють один одного. Я ціную вашу допомогу, порівнюючи їх і допомагаючи вирішити, який саме використовувати.

Я маю намір використовувати Hibernate для своєї програми (якщо ви не рекомендуєте використовувати API, що надається СУБД), але я також хочу мати можливість легко редагувати базу даних за допомогою інструмента перегляду SQL (модифікація схеми та зміна даних).

Дякую.


Не знаючи, що ви намагаєтеся зробити, відповісти на це питання неможливо. Я пропоную оновити питання з інформацією про розмір вашого проекту, скільки столів ви думаєте , ви будете мати, скільки записи і т.д.
Outlaw Програміст

3
можливий дублікат баз даних Embedded java
Hosam Aly


5
Прикро, що такі добрі питання гітлерівці закривають. Звичайно, деякі неясні запитання не підходять, але це, безумовно, є. Де "Підходяще" означає корисність для громади, а не деякі юридичні визначення.
Tuntable

Відповіді:


60

Або

  • HSQLDB - використовується OpenOffice, перевірена та стабільна. Це простий у використанні. Якщо ви хочете відредагувати свої db-дані, ви можете просто відкрити файл і відредагувати оператори вставки.

або

  • H2 - Сказав, що буде швидше (розробником, який спочатку створив hsqldb)

Яку з них ви використовуєте, залежати від вас, залежно від того, яка продуктивність і яка стабільність вам потрібна.

Розробник H2 поставив приємну оцінку продуктивності:
http://www.h2database.com/html/performance.html


35

Я використовую Apache Derby для майже всіх своїх вбудованих баз даних. Ви також можете використовувати Java-версію Java Sun, заснована на Derby, але остання версія Derby набагато новіша. Він підтримує безліч варіантів, які підтримують комерційні, рідні бази даних, але значно менші та простіші для вбудовування. У мене було кілька таблиць баз даних, що містять понад мільйон записів без проблем.

Я використовував HSQLDB і Hypersonic близько 3 років тому. Наразі у нього є деякі основні проблеми ефективності, і я переходжу до Дербі саме через це. Дербі був солідним, навіть коли був в інкубаторі в Apache.


Дербі був би чудовим, якби не той факт, що так багато помилок, і останнє оновлення було кілька років тому.
Хулі

2
@Hooli Я не можу засвідчити помилки, але "... останнє оновлення було кілька років тому" невірно. Відносно часу, коли ви опублікували свій коментар ( серпень 2016 р. ): Відбувся реліз менше, ніж за рік до цього ( жовтень 2015 р. ), Випуск через два місяці після ( жовтень 2016 р. ) Та реліз трохи більше року після цього ( жовтень 2017 р. - останнє ).
Забій

Оновлення цього коментаря, якщо хтось інший натрапив на цю тему під час пошуку. Останній реліз Derby відбувся у березні / 2019 році. Ось їх інформація про сайт: db.apache.org/derby
JavaJd

@Chris Dail Чи використовували ви дербі для мільйонів записів як звичайну базу даних, або в пам'яті, або для кешування?
Шреяни,

30

Мені потрібно було використовувати вбудовану базу даних Java в одному з моїх проектів, і я багато досліджував розуміння плюсів і мінусів кожної бази даних. Я написав блог, у якому перелічив плюси та мінуси популярних вбудованих баз даних Java (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), ви можете ознайомитися з цим. Я вибрав H2, як вважав, що найкраще відповідає моїм вимогам. Посилання на блог: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Сподіваюся, що це допоможе!



14

HSQLDB є хорошим кандидатом (той факт, що він використовується в OpenOffice, може переконати когось із вас), але для такого невеликого персонального додатку, чому б не використовувати об’єктну базу даних (замість класичної бази даних relanal)?

Я використовував DB4O в одному зі своїх проектів, і дуже задоволений ним. Орієнтований на об'єкти, вам не потрібен весь рівень сплячого режиму, і ви можете безпосередньо вставляти / оновлювати / видаляти / запитувати об’єкти! Більше того, вам не потрібно турбуватися про схему, ви безпосередньо працюєте з об'єктами, а DB4O робить все інше!

Я погоджуюсь, що може знадобитися деякий час, щоб звикнути до цього нового типу баз даних, але перегляньте підручник DB40, щоб побачити, наскільки легко це працює з БД!

EDIT: Як сказано в коментарях, DB4O автоматично обробляє новіші версії класів. Крім того, тут доступний інструмент для перегляду та оновлення бази даних поза додатком: http://code.google.com/p/db4o-om/


2
Дякую. DB4O добре виглядає для такого невеликого проекту, але я вважаю, що можливість перегляду та редагування даних поза додатком дуже важлива. Чи легко було б обробляти новіші версії класів? (наприклад, додані / видалені поля)
Hosam Aly

Як було сказано в моїй редакції, існує інструмент для перегляду та редагування БД поза додатком. І як сказав Фабіан, новіші версії класів автоматично передаються вручну.
Wookai

Дякуємо за оновлення. Мені дуже важливо мати інструмент для перегляду, тому дуже дякую.
Хосам Алі

12

Java DB (дистрибуція Apache Derby від Sun) тепер поставляється в JDK 6!

Мені хотілося зробити щось на кшталт Джейсона Коена, і я думав, що це виглядає як найпростіший спосіб перебувати в дистрибутиві JDK (що минулого тижня зараз є вимогою до мого додатку). А може, я просто ледачу таким чином.


Ви, мабуть, праві! У нас є вимога також працювати під Java 1.5, тому для нас це не варіант.
Джейсон Коен

... Я мав на увазі, що ти маєш рацію про те, що це найпростіший спосіб, а не те, що ти лінивий. :-P
Джейсон Коен

Java DB поставляється лише з Sun / Oracle реалізаціями JDK. Не стандартна частина Java.
Василь Бурк

7

Ми використовуємо HSQLDB у виробництві як варіант "без конфігурації" для нашого застосування. Це дозволяє людям проводити випробування без клопоту зі створення реальної бази даних.

Однак ми не підтримуємо його для нормального використання. Причин кілька:

  1. Уповільнюється пропорційно розміру даних.
  2. Важкий доступ за межами нашої програми (наприклад, для користувацьких звітів).
  3. Транзакції / синхронізацію з дисками важко отримати правильно, тому втратити дані легко.

Принаймні (2) та (3) існують шляхи, але це важко; набагато простіше, наприклад, встановити MySQL.


7

neo4j є:

вбудований на основі диска повністю транзакційний механізм стійкості Java, який зберігає дані, структуровані у графіках, а не в таблицях

У мене ще не було можливості спробувати це, але це виглядає дуже перспективно. Зауважте, що це не база даних SQL - ваш об’єктний графік зберігається для вас - тому він може не відповідати вашому наявному додатку.



5

Більшість речей вже було сказано, але я можу лише додати, що я використовував HSQL, Derby та Berkely DB у кількох своїх домашніх проектах, і всі вони працювали чудово. Тому я не думаю, що це насправді має велике значення, якщо бути чесним. Варто зазначити, що HSQL зберігає себе як текстовий файл із заявами SQL, що дуже добре. Це дуже просто для вас, коли ви розробляєте тести та налаштування даних швидко. За потреби можна також швидко вносити зміни. Здогадайтесь, ви могли легко перенести все це в будь-яку базу даних, якщо вам коли-небудь також потрібно буде змінити :)


5

HSQLDB може спричинити проблеми для великих додатків, але це не так вже й стабільно.

Найкраще, що я чув (але не досвід з перших рук) - це berkleyDB. Але якщо ви не відкриєте його, це коштуватиме вам руку і ногу через ліцензування ... дивіться це http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html для деталей.

пс. berkleyDB не є реляційною базою даних, якщо ви цього не знали.


О, я не знав, що Берклі не є реляційною базою даних! Дуже дякую!
Хосам Алі

не означає, що це не добре. але я підозрюю, що це, мабуть, занадто добре для вашого використання, вважаючи його чимось особистим. також погляньте на sqlite. Я думаю, що він має прив’язки до Java, але не можу знайти це atm.
Chii

4

Я великий фанат DB4O як для .Net, так і для Java .

Продуктивність стала набагато кращою з ранніх версій. Модель ліцензування теж не погана. Мені особливо подобаються варіанти, доступні для запиту ваших об'єктів. Запит на прикладі дуже потужний і легко звикнути.


4

Які критерії ви використаєте для їх оцінки? Якщо ви ще не знаєте, то не потрібно приймати рішення прямо зараз. Постарайтеся зробити вашу заявку якомога активнішою для впровадження бази даних - надаючи відповідні обгортки, об’єкти доступу до даних тощо, і прийміть це рішення, коли у вас є всі факти, і вам доведеться вирішити.

Якщо ви використовуєте реляційні бази даних та SQL, вищезазначене не повинно бути занадто важким (використовуючи JDBC тощо). Переконайтеся, що у вас є багато оточуючих тестів, щоб, коли ви хочете перемикатися між базами даних, можна було визначити, що функціональність вашої програми залишається такою ж.

Я зіткнувся з тим же питанням деякий час тому. Я не знав, до якої бази даних звертатись, тому в моєму першому рішенні було використано Derby (або HSQLDB?), І пізніше я зміг перейти на HSQLDB (або Derby? Не пам'ятаю, яке рішення працювало), як тільки я визначив, де У мене були проблеми (що стосуються продуктивності), і яке рішення дійсно допоможе мені.


3

Я використав Derby, і я дуже ненавиджу його функції перетворення типу даних, особливо функції дати / часу. (Тип номера) <--> Перетворення Вархара - це біль.

Отже, якщо ви плануєте використовувати перетворення типів даних у ваших операторах БД, враховуйте використання інших вбудованих БД, я дізнаюся це занадто пізно.

Останні перетворення даних версії дербі


3

Я особисто прихильник HSQLDB, але в основному тому, що це було першим, що я спробував.

Як кажуть, H2 швидший і забезпечує приємніший інтерфейс GUI (який, до речі, є загальним і працює з будь-яким драйвером JDBC).

Принаймні HSQLDB, H2 та Derby надають серверні режими, що чудово підходить для розробки, оскільки ви можете одночасно отримувати доступ до БД зі своїм додатком та деяким інструментом (який вбудований режим зазвичай не дозволяє).


3

Я думаю, я трохи запізнююся (дуже пізно ;-)) до цієї публікації, але я хотів би додати Perst, відкритий джерело, об'єктно-орієнтовану вбудовану базу даних для Java & .NET. на ваш розгляд. Perst - це база даних із відкритим кодом / вбудованою ліцензією подвійної ліцензії для Java. Дистрибутив сумісний з платформою Android для Google, а також включає Perst Lite для Java ME. Ми навіть створили орієнтир Android і створили докладну інформацію на цю тему ... ви можете подивитися тут: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

Все найкраще, Кріс


3

Якщо я прав, H2 - це від тих самих хлопців, які написали HSQLDB. Це набагато краще, якщо довіряти орієнтирам на їхньому сайті. Також існує думка про те, що громада сонця занадто швидко вскочила в Дербі.


2
Які поняття передчасного дербі стосуються DerbyDB? Зрілість?
simgineer

2

Я розумію, що ви згадали про перегляд SQL, але все інше у вашому питанні змушує мене запропонувати вам також розглянути DB4O , який є чудовим, простим БД об'єкта .


Дякую. DB4O добре виглядає для такого невеликого проекту, але я вважаю, що можливість перегляду та редагування даних поза додатком дуже важлива. Чи легко було б обробляти новіші версії класів? (наприклад, додані / видалені поля)
Hosam Aly

Так, він автоматично підтримує деякі рефактори, ви можете дізнатися більше про це тут: ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.