我有一个已建立的软件产品,它使用HSQLDB作为其内部设置数据库.客户项目存储在此数据库中.多年来,HSQLDB已经为我们提供了相当好的服务,但它有一些稳定性/腐败问题,我们必须围绕这些问题进行编码,即便如此,我们也似乎无法完全保护自己.
我正在考虑更改内部数据库.从开发的角度来看,这样做会相当痛苦,但是向客户解释损坏的数据库(和丢失的数据)并不好玩.
所以我的问题是:有没有人有足够的经验来衡量Apache Derby的长期稳定性?我发现谷歌的一篇帖子抱怨德比不稳定,但是从2006年开始,所以我觉得它在过去的4年里得到了改善.或者,是否存在我可以使用的另一个纯Java嵌入式(进程中)数据库(商业或开源).性能对我来说不是很重要.稳定是王道.断电时的数据完整性,良好的BLOB支持和热备份都是必须的.
请不要建议不是基于SQL的关系数据库.我正在尝试改造现有产品,而不是从头开始,谢谢.
我正在尝试运行SparkSQL:
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
Run Code Online (Sandbox Code Playgroud)
但是我得到的错误如下:
... 125 more
Caused by: java.sql.SQLException: Another instance of Derby may have already booted the database /root/spark/bin/metastore_db.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
... 122 more
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /root/spark/bin/metastore_db.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我看到有一个metastore_db文件夹存在..
我的hive Metastore包含mysql as metastore.但不确定为什么错误显示为derby execption
如果我创建具有主键的表是为表自动创建的索引,或者是否需要单独执行.
即如果这是表ddl
CREATE TABLE release(guid varchar(36) NOT NULL PRIMARY KEY,
name varchar(255),xmldata CLOB(512 K))
Run Code Online (Sandbox Code Playgroud)
我还需要做什么
CREATE INDEX release_idx ON release(guid)
Run Code Online (Sandbox Code Playgroud)
或不
(我正在使用Derby一个Java附带的数据库)
我正在尝试将对象持久化到数据库.继续获取'列ID不能接受空值错误'.我的对象看起来像这样:
@Entity
public class TestTable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id = 0;
@Column(nullable=false, length=256)
private String data = "";
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
Run Code Online (Sandbox Code Playgroud)
我的坚持功能:
public static synchronized boolean persistObject(Object obj){
boolean success = true;
EntityManager em = null;
EntityTransaction tx = null;
try{
em = getEmf().createEntityManager();
tx = …Run Code Online (Sandbox Code Playgroud) 我正在尝试更改derby db列的数据类型.当前价格列设置为DECIMAL(5,0).我想把它改成DECIMAL(7,2).我这样做了:
alter table item alter column price set data type DECIMAL(7,2);
Run Code Online (Sandbox Code Playgroud)
但它没有用,并显示错误:
Error: Only columns of type VARCHAR may have their length altered.
Run Code Online (Sandbox Code Playgroud)
我可以知道如何改变它吗?谢谢.
我需要一个用于Clojure应用程序的嵌入式数据库.也许它与任何其他Java应用程序的标准相同,但我还是得到其他人的意见.我不是选择SQLite,因为那不是纯Java,因此独立应用程序的分发变得复杂得多.似乎要走的路是Apache Derby.还有什么我应该考虑的吗?
运行spark-shell时会创建一个文件derby.log和一个文件夹metastore_db.如何配置spark以将这些放在其他地方?
对于derby日志,我尝试过去掉derby.log就像这样spark-shell --driver-memory 10g --conf "-spark.driver.extraJavaOptions=Dderby.stream.info.file=/dev/null"有几个不同的属性,但火花忽略了它们.
有谁知道如何摆脱这些或为他们指定默认目录?
对于什么类型的要求,你会选择Apache Derby(或Java DB)而不是MySQL(反之亦然)?我环顾四周,人们只是比较两者,但没有人谈论何时考虑每一个.我正在使用Glassfish + Java/Restlet + MySQL开发基于Web的应用程序.
我希望这个系统有大约100-200个用户,在给定时间内大约有30-50个并发用户负载 - 主要是.
如果我想让网络应用程序可下载/可分发,我被告知要查看Derby.但这是我使用它的唯一原因吗?它适用于网络应用程序吗?有人用过吗?您的经验是什么,何时选择其中一个?(大多数关于比较的讨论都早于MySQL v5,因为它不支持存储过程,触发器等,但现在不再是这种情况).
我可以理解一个独立的数据库服务器模型,其中Web服务器发送请求,但是这个模型如何随嵌入式数据库而改变?或者是否默认在网络配置中使用Derby?
我在这里找到了很多比较,但不是这个比较; 那么,每个人最好的是什么?
我的应用程序目前使用Microsoft Access,但现在可能托管在Linux机器上.此外,当从多台计算机访问时,其中一台计算机可能会更新记录(当其他用户正在读取时).
我还要求嵌入式数据库应该支持复杂的SQL查询 - 比如内部SQL,联接等.
我尝试了SQLite,但是许多现有的查询都失败了,或者需要修复(就像在使用内部联接的简单查询中,在FROM之后的括号不被SQLite接受,并且必须被删除).也不支持右连接.
我开始了解Apache Derby和H2,但首先会更喜欢你的宝贵意见.
编辑:
我忘了提到我的应用程序完全用Java编写.
编辑:
在预设时,我使用Microsoft Access mdb,在网络驱动器上共享,从远程计算机进行无DSN连接.
更新
我使用Firebird进行了试验,它确实看起来非常好,零管理和SQL兼容.它很快,我可以尝试的任何典型查询都没有问题.我对它非常满意,并希望将它用于我提出这个问题的项目.
希望Advantage Server也会很好,但没有时间来审查它.在审查/使用Firebird之后,我觉得不需要尝试其他任何东西.