2010-06-24 59 views
4

我正在编写一个应用程序,该应用程序解析一个大文件,生成大量数据并使用它进行一些复杂的可视化。由于所有这些数据都不能保存在内存中,因此我做了一些研究,并开始将嵌入式数据库视为这些数据的临时容器。何时使用嵌入式数据库

我的问题是:这是解决这个问题的传统方式吗?并且是一个嵌入式数据库(除了构造数据)应该通过在内存中保存一个子集(像缓存)来管理数据,而其余的则保存在磁盘上?谢谢。

编辑:澄清:我正在写一个桌面应用程序。该应用程序将被输入一个大小为100 Mb的文件。阅读文件后,应用程序将生成大量可视化的图形。因为,图表可能有如此大量的节点,它们可能不适合内存。我应该将它们保存到一个嵌入式数据库中,该数据库将只保留内存中的相关数据吗? (嵌入式数据库是否这样做?),或者我应该编写自己的复杂模块来完成这个工作?

+0

我的答案没有解决您的问题吗? – 2010-07-01 18:34:56

回答

7

棘手的问题 - 但我会分享我的经验,让你决定是否有帮助。

如果您需要从处理源文件保留的输出,你用它来产生多个意见所得到的数据,那么你可能考虑使用的嵌入式数据库。原因使用嵌入式数据库(恕我直言):

  • 要利用RDBMS功能(ACID,关系,外键约束,触发器,聚集......)
  • 为了更容易导出以灵活的方式
  • 数据要允许访问您处理的数据对外部客户端(称为格式)
  • 为了让数据更灵活的转换观看

因素做准备时,你在作出决定时应该考虑:

  • 什么是目标平台(s)(windows,linux,android,iPhone,PDA)?
  • 什么技术基础? (Java,.Net,C,C++,...)
  • 预期或需要设计哪些资源约束? (RAM,CPU,HD空间)
  • 需要考虑哪些操作行为(连接到网络,断开连接)?

在典型的现代桌面上,有足够的备用容量来处理大多数操作。在eeePC,PDA和其他便携式设备上,可能不是。在嵌入式设备上,很可能不是。您使用的语言可能具有帮助进行内存管理的功能 - 也许您可以利用这些功能。连接性方面(有状态/无状态/等)可能会影响您在任何给定点上确实需要保留在内存中的多少。

如果你正在处理真的很大的文件,那么你可能会考虑采用流处理方式,这样你一次只能在内存中占用一小部分数据 - 但这并不意味着你应该或者不应该)使用嵌入式数据库。直的文本或二进制文件也可以工作(基于记录,基于列,基于行...)。

有些数据库将允许您在数据存储后与数据进行交互的更有效方式 - 这取决于引擎。我发现如果你的基本文件需要很多聚合(我的意思是你最初从最初的源文件生成的文件),那么RDBMS引擎对简化你的逻辑非常有帮助。其他选项包括构建基本变换,然后添加其他步骤以将其处理到每个特定视图的其他临时存储中,然后再处理它们以呈现到目标(报告?)格式。

只是一个意识流的反应 - 希望有一点帮助。

编辑:

根据您的进一步澄清,我不知道一个嵌入式数据库是要采取的方向。你或者需要做一些简化的假设来渲染你的图或者像分割一样调查方法(渲染图的部分,然后在渲染下一部分之前缓存输出)。