我正在开发一个涉及快速解析大量数据的项目。目前,此数据位于磁盘上,并分解为目录层次结构:
(Folder: DataSource) -> (Files: Day1, Day2, Day3...Day1000...)
(Folder: DataSource2) -> (Files: Day1, Day2, Day3...Day1000...)
...
(Folder: DataSource1000) -> ...
...
每天文件包含需要非常快速访问的条目。
我最初的计划是在java中使用传统的FileIO来访问这些文件,但是经过进一步阅读,我开始担心这可能太慢了。
简而言之,从不同的DataSources和Days中选择性地从我的文件系统加载条目的最快方法是什么?
答案 0 :(得分:6)
这个问题可以通过两种方式解决,但这取决于几个因素
转到FileIO。
转到数据库
答案 1 :(得分:2)
根据您使用的架构,您可以实现不同的缓存方式,在Jboss中有一个内置的Jboss缓存,还有第三方开源软件可以根据您的需要利用Redis或EhCache等缓存。基本上缓存将对象存储在其内存中,有些是根据需要进行钝化/激活,当内存耗尽时,它被存储为物理IO文件,这些文件也可以通过缓存机制轻松激活。它降低了程序所拥有的数据库连接。还有其他缓存,但这里有一些与我合作过的:
答案 2 :(得分:0)
从不同的DataSources和Days中选择性地从我的文件系统加载条目的最快方法是什么?
有选择地意味着过滤,所以我的答案是localhost数据库。一般来说,如果您从大量记录中筛选,排序,分页或提取不同的记录,则很难击败本地主机SQL服务器。你得到一个查询优化器(没有人做那个Java),一个缓存(需要在Java中努力,特别是失效),数据库索引(还没有看到用Java完成)等等。可以手动实现这些东西,但是然后你正在用Java编写数据库。
除此之外,您还可以访问更高级别的SQL函数,例如窗口aggegrates等,因此在大多数情况下,无需使用Java进行后处理数据。