2010-12-09 42 views
2

我有处理这类数据的Java应用程序:的Java DB选择更好的性能比较

class MyData 
{ 
    Date date; 
    double one; 
    double two; 
    String comment; 
} 

的所有数据都存储在CSV格式的硬盘,这样的数据序列的最大尺寸为〜150 MB,并就目前而言,我只是将它完全加载到内存中并使用它。

现在我的任务是增加数百GB的最大数据序列。我猜我需要使用数据库,但我之前没有和他们一起工作。

我的问题:

  1. 哪个DB更好地选择我的原因 (将只有1台 与数据abowe)?
  2. 哪个库 更好地使用连接的Java < - > DB
  3. 我想会有用过的东西 光标一样?!?如果是这样,有没有 光标实现与良好的记录 快速访问缓存?

任何其他提示&关于java的技巧< - > DB欢迎光临!

+0

感谢所有人!我已经成功地完成了我的任务,我的选择是:JDBC + Postgresql。它的工作速度非常快! – Arkaha 2010-12-18 08:29:00

回答

5

你的问题是非常不明确的。没有最好的品种 - 这取决于你有多少钱和什么样的硬件。

由于Java和数据库之间的映射非常简单,JDBC应该足够了。 JDBC将根据需要为您创建一个游标;在ResultSet的行中丢失了循环。但是,根据数据库,您可能需要将其配置为使用游标。

既然你提到“数百GB”,那就排除了大部分“简单”数据库。如果你有钱,试试Oracle。如果你没有钱,试试MySQL或Postgres。

您还可以尝试JavaDB(也称为Derby)。但我不确定演出会是你需要的。

请注意,他们都有他们的怪癖和“功能”,所以期待花几个星期找到你的方式与他们。

+0

+1 - 他可能还需要根据他的SQL定义二级索引。 – 2010-12-09 13:18:29

1

我会推荐JavaDB。我在销售点系统中使用它,它工作得很好。将它集成到Java应用程序中非常简单,如果需要,您可以将它集成到同一个.jar文件中。

Using Java DB in Desktop Applications可能是一篇有用的文章。您将使用JDBC来连接来自Java的数据库,如果您不想使用JavaDB,则可以轻松切换到另一个数据库。

1

你会想要评估几个数据库(如果它们不是开源/免费的,你可以试用它们中的任何一个)。我建议您尝试使用Oracle,Mysql/Postgres以及您的数据大小(以及缺乏明显的复杂性),您可能还需要考虑数据网格(网格或类似)。

虽然是绝对原型。

0

我只想补充一点,“最快”的数据库不一定是最好的。

您还需要考虑到:

  • 可靠性,
  • 软件许可成本,
  • 易用性,
  • 便于管理,
  • 可用性的支持,
  • 等。
2

完全取决于您将要处理的数据。您是否需要对其进行索引以检索特定记录,或者您是否正在处理整个数据集以生成一些统计信息(例如)?数据库是否需要由多个客户端/进程同时访问?

不要立即冲向SQL/JDBC,关系数据库功能强大,但它们增加了很多复杂性,对于当前的任务来说通常完全没有必要。

再次,取决于你实际需要做什么,像BerkeleyDB可能适合账单,或者你可能只需要一个更紧凑的二进制消息格式:检查出Protocol BuffersKryo

如果您确实需要扩展功能,请查看Hadoop/HDFS进行分布式处理(但这会变得相当复杂)。

哦,一般来说,JavaDB/Derby往往会有所吸引。