Java File IO vs Local数据库

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

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

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

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

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

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

去找FileIO。

  1. 如果卷是<毫秒行
  2. 如果你不做像Jon Skeet这样的复杂查询
  3. 如果您通过使用hte文件夹名称:“DataSource”作为关键字来获取行

去DB

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

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

  • Jboss: http : //www.jboss.org/jbosscache/
  • Redis: http : //redis.io/
  • EhCache: http : //ehcache.org/

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

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

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