分析大量数据的有效方法?

时间:2010-02-28 01:08:56

标签: c# sql data-structures list data-analysis

我需要分析成千上万行数据。数据从文本文件导入。每行数据都有八个变量。目前,我使用一个类来定义数据结构。当我阅读文本文件时,我将每个行对象存储在通用列表List。

我想知道是否应该切换到使用关系数据库(SQL),因为我需要分析每行文本中的数据,尝试将其与我当前存储在通用列表中的定义术语相关联(List)

目标是使用定义翻译大量数据。我希望定义的数据是可过滤的,可搜索的等等。使用数据库更有意义,我想的更多,但我想在更改之前与更有经验的开发人员确认,然后再次(我使用结构和首先是arraylists。

我能想到的唯一缺点是,在用户翻译和查看数据后,不需要保留数据。不需要永久存储数据,因此使用数据库可能有点过分。

7 个答案:

答案 0 :(得分:3)

进入数据库并非绝对必要。这取决于数据的实际大小和您需要执行的过程。如果要将数据加载到带有自定义类的List中,为什么不使用Linq进行查询和过滤?类似的东西:

var query = from foo in List<Foo>
            where foo.Prop = criteriaVar
            select foo;

真正的问题是数据是否如此之大以至于无法将数据无法轻松加载到内存中。如果是这种情况,那么是的,数据库会简单得多。

答案 1 :(得分:3)

这不是大量数据。我认为没有任何理由让数据库参与您的分析。

C#中内置了一种查询语言 - LINQ。原始海报目前使用了一个对象列表,所以没有什么可做的。在我看来,在这种情况下,数据库会增加比光更多的热量。

答案 2 :(得分:1)

听起来你想要的是一个数据库。 Sqlite supports内存数据库(使用“:memory:”作为文件名)。我怀疑其他人也可能有内存模式。

答案 3 :(得分:1)

当我在我以前的公司工作时,我遇到了你现在遇到的同样的问题。事情是我正在为很多条形码生成的文件寻找一个具体而好的解决方案。条形码生成一个文本文件在一个文件中有数千条记录。最初操作和呈现数据对我来说非常困难。基于我编程的记录,我创建了一个读取文件的类并将数据加载到数据表中并且能够将其保存在数据库中。我使用的数据库是SQL server 2005.然后我能够轻松地管理保存的数据并以我喜欢的方式呈现它。主要是从文件中读取数据并保存到数据库。如果你这样做所以你将有很多选择来操纵和呈现你喜欢的方式。

答案 4 :(得分:0)

如果您不介意使用访问权限,可以执行以下操作

附加空白Access数据库作为资源 需要时,将db写入文件。 运行处理数据列的CREATE TABLE语句 将数据导入新表 使用sql运行计算 OnClose,删除该访问数据库。

您可以使用Resourcer之类的程序将数据库加载到resx文件

  ResourceManager res = new ResourceManager( "MyProject.blank_db", this.GetType().Assembly );
  byte[] b = (byte[])res.GetObject( "access.blank" );

然后使用以下代码将资源拉出项目。获取字节数组并将其保存到临时文件名

的临时位置

“MyProject.blank_db”是资源文件的位置和名称 “access.blank”是给予要保存的资源的选项卡

答案 5 :(得分:0)

如果你唯一需要做的就是搜索和替换,你可以考虑使用sed和awk,你可以使用grep进行搜索。当然是在Unix平台上。

答案 6 :(得分:0)

根据您的描述,我认为linux命令行工具可以很好地处理您的数据。使用数据库可能会使您的工作不必要地复杂化。如果您使用的是Windows,这些工具也可以通过不同的方式使用。我会推荐cygwin。以下工具可能涵盖您的任务:sort,grep,cut,awk,sed,join,paste。

这些unix / linux命令行工具对于Windows用户来说可能看起来很可怕,但有些人喜欢这些工具。以下是我爱他们的原因:

  1. 他们允许您的技能积累 - 您对部分工具的知识可以在将来的不同任务中发挥作用。
  2. 它们允许您的努力积累 - 您用于完成任务的命令行(或多个脚本)可以根据需要使用不同的数据重复多次,而无需人工干预。
  3. 它们通常优于您可以编写的相同工具。如果您不相信,请尝试使用您的terabyte文件版本进行排序。