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

C# 分析大量数据的有效方法?,c#,sql,data-structures,list,data-analysis,C#,Sql,Data Structures,List,Data Analysis,我需要分析数万行数据。数据是从文本文件导入的。每行数据有八个变量。目前,我使用一个类来定义数据结构。在阅读文本文件时,我将每个行对象存储在一个通用列表中,即list 我想知道我是否应该切换到使用关系数据库(SQL),因为我需要分析每行文本中的数据,尝试将其与我目前也存储在通用列表(List)中的定义术语相关联 目标是使用定义翻译大量数据。我希望定义的数据是可过滤的、可搜索的,等等。我越想使用数据库就越有意义,但我想在进行更改之前与更有经验的开发人员确认一下(我最初使用的是structs和arra

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

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

目标是使用定义翻译大量数据。我希望定义的数据是可过滤的、可搜索的,等等。我越想使用数据库就越有意义,但我想在进行更改之前与更有经验的开发人员确认一下(我最初使用的是structs和arraylists)


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

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

如果您不介意使用access,下面是您可以做的

将空白访问数据库附加为资源 需要时,将数据库写入文件。 运行CREATETABLE语句来处理数据列 将数据导入到新表中 使用sql运行计算 一旦关闭,删除访问数据库

您可以使用Resourcer之类的程序将db加载到resx文件中

  ResourceManager res = new ResourceManager( "MyProject.blank_db", this.GetType().Assembly );
  byte[] b = (byte[])res.GetObject( "access.blank" );
然后使用以下代码从项目中提取资源。获取字节数组并使用临时文件名将其保存到临时位置

“MyProject.blank_db”是资源文件的位置和名称
“access.blank”是为资源提供的用于保存的选项卡

不一定要转到数据库。这取决于数据的实际大小和需要执行的过程。如果要将数据加载到带有自定义类的列表中,为什么不使用Linq进行查询和筛选?比如:

var query = from foo in List<Foo>
            where foo.Prop = criteriaVar
            select foo;
var query=来自列表中的foo
其中foo.Prop=criteriaVar
选择foo;

真正的问题是数据是否太大,以至于无法方便地加载到内存中。如果是这样的话,那么是的,数据库会简单得多

当我在上一家公司工作时,我面临着与您现在面临的问题相同的问题。问题是,我正在为大量条形码生成的文件寻找一个具体而好的解决方案。条形码生成一个文本文件,在一个文件中包含数千条记录。起初对我来说,处理和显示数据非常困难。基于在我编程的记录上,我创建了一个类,该类读取文件并将数据加载到数据表中,并能够将其保存在数据库中。我使用的数据库是SQL server 2005。这样我就可以轻松地管理保存的数据,并以我喜欢的方式显示数据。主要的一点是从文件中读取数据并保存到数据库中。如果这样做,您将有很多选项可供操作,并以您喜欢的方式显示数据。

这不是大量的数据。我看不出有任何理由在你的分析中使用数据库


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

< P>如果你只需要搜索和替换,你可以考虑使用SED和AWK,并且可以使用GRIP进行搜索。当然是在Unix平台上。

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

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

  • 它们可以让你的技能不断积累——你的知识对于未来的不同任务会有所帮助
  • 它们可以让您的工作不断积累—您用来完成任务的命令行(或脚本)可以根据需要使用不同的数据重复多次,而无需人工交互
  • 它们通常比您可以编写的相同工具表现更好。如果您不相信,请尝试使用您的版本对TB文件进行排序

  • 顺便说一句,Visual Studio 2008附带的SQL Server Compact Edition也适用于此。我想我更愿意使用内存中的SQL解决方案,但我必须进行研究。我导入的文件往往包含数万行,有些可以跨越10万行。每行有八个字段需要分析和翻译。例如,一个字段可能包含值“phy”,需要根据定义文件转换为“物理层”。我正试图找出分析和翻译这些数据的最有效方法。你是要对这些数据进行汇总分析,还是只逐行处理?如果是后者,那么读取文本文件并进行边处理可能比尝试将数据导入SQLExpress或Access要快得多。尽管如此,将其放入数据库将给您带来一定程度的灵活性,例如创建索引的能力,您必须自己编写索引。我认为我别无选择,只能进行聚合分析,因为某些定义取决于文本文件中的前几行。此外,通过聚合分析,我可以重组数据,使其更可读/更容易理解。即使我