Java File IO vs Local database

时间:2013-06-17 05:54:35

标签: java database file-io

我正在开发一个涉及快速解析大量数据的项目。目前,此数据位于磁盘上,并分解为目录层次结构:

(Folder: DataSource) -> (Files: Day1, Day2, Day3...Day1000...)
(Folder: DataSource2) -> (Files: Day1, Day2, Day3...Day1000...) 
...
(Folder: DataSource1000) -> ...
...

每天文件包含需要非常快速访问的条目。

我最初的计划是在java中使用传统的FileIO来访问这些文件,但是经过进一步阅读,我开始担心这可能太慢了。

简而言之,从不同的DataSources和Days中选择性地从我的文件系统加载条目的最快方法是什么?

3 个答案:

答案 0 :(得分:6)

这个问题可以通过两种方式解决,但这取决于几个因素

转到FileIO。

  1. 如果音量<毫秒行
  2. 如果你不做像Jon Skeet这样的复杂查询
  3. 如果您通过使用hte文件夹名称:“DataSource”作为密钥
  4. 来获取行的依据

    转到数据库

    1. 如果您看到您的节目通过数百万条记录
    2. 您可以使用单个选择进行复杂的选择,甚至多行。
    3. 如果您知道为DB创建基本表结构

答案 1 :(得分:2)

根据您使用的架构,您可以实现不同的缓存方式,在Jboss中有一个内置的Jboss缓存,还有第三方开源软件可以根据您的需要利用Redis或EhCache等缓存。基本上缓存将对象存储在其内存中,有些是根据需要进行钝化/激活,当内存耗尽时,它被存储为物理IO文件,这些文件也可以通过缓存机制轻松激活。它降低了程序所拥有的数据库连接。还有其他缓存,但这里有一些与我合作过的:

答案 2 :(得分:0)

  

从不同的DataSources和Days中选择性地从我的文件系统加载条目的最快方法是什么?

有选择地意味着过滤,所以我的答案是localhost数据库。一般来说,如果您从大量记录中筛选,排序,分页或提取不同的记录,则很难击败本地主机SQL服务器。你得到一个查询优化器(没有人做那个Java),一个缓存(需要在Java中努力,特别是失效),数据库索引(还没有看到用Java完成)等等。可以手动实现这些东西,但是然后你正在用Java编写数据库。

除此之外,您还可以访问更高级别的SQL函数,例如窗口aggegrates等,因此在大多数情况下,无需使用Java进行后处理数据。