11

我一直在从事一个项目,该项目从模拟中生成大约 10 到 1 亿个输出,我想存储这些输出以供将来分析。数据有几个自然级别的组织,例如教室里有参加考试的学生,这些考试有一些不同的表现指标。

就能够一次全部放入内存而言,我的数据似乎是边界线(考虑到模拟的计算需要内存中的大量数据来进行计算),但我没有任何迫切需要让我的程序立即可以使用所有数据。

我正在考虑将计算值输出到 SQL 数据库还是纯文本文件是否更好。我正在寻找有关哪种方法可能更快/更容易维护的建议(或者如果您有其他建议来存储我愿意接受的数据)。

我不需要能够与其他任何人共享数据,也不需要担心在未来几年内访问数据。我只需要一种方便的方法来避免每次我想对值的分析进行调整时重新生成模拟。

4

4 回答 4

4

我会考虑使用数据库——对于没有某种分类方案的文件系统来说,1 亿个文件太多了,而数据库可以轻松处理这么多行。您可以将输出序列化为 BLOB 列,因此您不必映射它。此外,请考虑 SQL Server 具有文件流访问权限,因此这本质上可能是一种混合方法,其中 SQL 为您管理文件。

于 2012-12-21T01:40:21.117 回答
3

顺便说一句,听起来你最好将每次模拟运行的结果保存到一个平面文件中。它不必是文本文件 - 它可以是二进制文件。

在一次或多次模拟运行之后,可以读取文件并将其放入数据仓库以供以后分析。

于 2012-12-21T01:34:29.687 回答
2

看看 MongoDB,它的性能显然比 SQL Server 2008 快 30 到 50 倍。

http://blog.michaelckennedy.net/2010/04/29/mongodb-vs-sql-server-2008-performance-showdown/

于 2012-12-21T03:22:42.283 回答
2

将数据从 RDBMS 服务器加载到内存中的粗略速率约为每秒 10K 条记录。如果您有 100M 条记录,并且您必须在某个时候使用所有数据,那么您大约需要三个小时来加载数据。那是在您进行任何计算之前!

普通文件可以快几个数量级。您可以使用基于文本的文件快速获得;采用二进制会以牺牲数据文件的可读性为代价来提高您的速度。

于 2012-12-21T01:46:53.557 回答