当前位置: 首页 > 工具软件 > 我有计划 > 使用案例 >

java存储大量数据_java – 我有哪些选择来存储和查询大量数据?

澹台博文
2023-12-01

我正在评估

Java中高效数据存储的选项.数据集是带有命名主键的带时间戳的数据值.例如

Name: A|B|C:D

Value: 124

TimeStamp: 01/06/2009 08:24:39,223

可能是某个时间点的股票价格,所以我认为它是一个经典的时间序列数据模式.但是,我真的需要一个通用的RDBMS解决方案,它可以与任何合理的JDBC兼容数据库一起使用,因为我想使用Hibernate.因此,像Oracle这样的数据库的时间序列扩展实际上并不是一个选项,因为我希望实现者能够使用他们自己的支持JDBC / Hibernate的数据库.

这里面临的挑战仅仅是可以在短时间内积累的大量数据.到目前为止,我的实现主要围绕定义周期性汇总和清除计划,其中原始数据聚合到DAY,WEEK,MONTH等表中,但缺点是粒度的早期丢失以及存储在不同时段之间的周期不匹配的轻微不便聚集.

挑战的选择有限,因为在保留数据的原始粒度的同时可以物理压缩多少数据存在绝对限制,并且这种限制因使用关系数据库的指令而加剧,并且具有通用的JDBC能力. .

借用经典数据压缩算法中的概念概念,并利用同一命名密钥的许多连续值可以预期相同的事实,我想知道是否有办法通过将重复值混合到一起来无缝地减少存储记录的数量一个逻辑行,同时还存储一个计数器,有效地表示“下一个n个记录具有相同的值”.这样的实现看起来很简单,但权衡的是数据模型现在使用标准SQL进行查询时非常复杂,尤其是在使用任何类型的聚合SQL函数时.这显着降低了数据存储的实用性,因为只有复杂的自定义代码才能将数据恢复到“解压缩”状态,从而导致阻抗与数百个无法正确呈现此数据的工具不匹配.

我考虑了定义自定义Hibernate类型的可能性,这些类型基本上“理解”压缩数据集并将其重新打开并使用动态创建的合成行返回查询结果. (除了严格控制的输入流之外,数据库将只读取所有客户端).我想到的一些工具除了原始JDBC(例如JasperReports)之外还将与Hibernate / POJOS集成.但这并没有真正解决聚合函数问题,并且可能还有许多其他问题.

因此,我有可能让自己辞职,可能不得不使用更专有的[可能非SQL]数据存储(任何建议赞赏),然后专注于编写伪JDBC驱动程序的可能不那么复杂的任务,以至少简化与外部工具.

我听说引用了一个叫做“bit packed file”的东西作为实现这种数据压缩的机制,但我不知道有哪些数据库提供这个以及我想做的最后一件事(或者可以做,真的…. )写我自己的数据库.

有什么建议或见解吗?

 类似资料: