3

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

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

每个 Day 文件都包含需要快速访问的条目。

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

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

4

3 回答 3

6

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

去 FileIO。

  1. 如果卷是< 百万行
  2. 如果你不像 Jon Skeet 说的那样做一个复杂的查询
  3. 如果您对获取行的引用是使用 hte Folder Name: "DataSource" 作为键

去数据库

  1. 如果你看到你的程序读取了数百万条记录
  2. 您可以进行复杂的选择,甚至可以使用单个选择进行多行。
  3. 如果您有为 DB 创建基本表结构的知识
于 2013-06-17T06:05:45.310 回答
2

根据您使用的架构,您可以实现不同的缓存方式,在 Jboss 中有一个内置的 Jboss 缓存,还有第三方开源软件可以根据您的需要使用缓存,如 Redis 或 EhCache。基本上,缓存将对象存储在它们的内存中,有些会根据需要被钝化/激活,当内存耗尽时,它会存储为物理 IO 文件,这些文件也很容易被缓存机制编组激活。它降低了程序持有的数据库连接性。还有其他缓存,但这里有一些我使用过的缓存:

于 2013-06-17T06:04:51.170 回答
0

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

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

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

于 2013-06-17T06:52:17.017 回答