我有处理这种数据的java应用程序:
class MyData
{
Date date;
double one;
double two;
String comment;
}
所有数据都以csv格式存储在硬盘上,此类数据序列的最大大小约为150 mb,此时我只需将其完全加载到内存中并使用它。
现在我的任务是增加数百GB的最大数据序列。我想我需要使用DB,但之前我没有使用它们。
我的问题:
关于java的任何其他提示和技巧< - >欢迎DB!
答案 0 :(得分:5)
你的问题非常不明确。没有最好的品种 - 这取决于你有多少钱和什么样的硬件。
由于Java和DB之间的映射非常简单,因此JDBC应该足够了。 JDBC将根据需要为您创建游标;丢失了ResultSet
中行的循环。但是,根据数据库的不同,您可能需要将其配置为使用游标。
由于您提到“数百GB”,因此排除了大多数“简单”数据库。如果您有钱,请尝试使用Oracle。如果您没有钱,请尝试使用MySQL或Postgres。
您也可以尝试JavaDB(也称为Derby)。但我不确定性能是否符合你的要求。
请注意,他们都有他们的怪癖和“功能”,所以期望花几周的时间与他们一起找到你的方式。
答案 1 :(得分:2)
完全取决于您对数据的处理方式。您是否需要将其编入索引以检索特定记录,或者您是否正在流处理整个数据集以生成某些统计信息(例如)?是否需要多个客户端/进程同时访问数据库?
不要立即急于使用SQL / JDBC,关系数据库功能强大,但它们增加了很多复杂性,对于手头的任务来说通常是完全没有必要的。
同样,根据您实际需要做的事情,BerkeleyDB之类的内容可能符合要求,或者您可能只需要更紧凑的二进制消息格式:查看Protocol Buffers和{{3} }。
如果你真的需要扩展,请查看Hadoop / HDFS以进行分布式处理(但这变得相当复杂)。
哦,而且一般来说,JavaDB / Derby往往会有些尴尬。
答案 2 :(得分:1)
我会推荐JavaDB。我在销售点系统中使用它并且它非常好用。它很容易集成到您的Java应用程序中,如果需要,您可以将它集成到同一个.jar
文件中。
Using Java DB in Desktop Applications可能是一篇有用的文章。您将使用JDBC从Java连接数据库,如果您不想使用JavaDB,这可以很容易地切换到另一个数据库。
答案 3 :(得分:1)
您需要评估几个数据库(如果它们不是开源/免费的话,您可以对它们中的任何一个进行试验)。我建议尝试使用Oracle,Mysql / Postgres以及数据的大小(以及它缺乏明显的复杂性),你可能也想考虑一个数据网格(gridgain或类似的)。
但绝对是原型。
答案 4 :(得分:0)
我想补充一点,“最快”的数据库不一定是最好的。
您还需要考虑: