.NET数据存储 - 内置集合和外部SQL数据库之间的东西?

时间:2010-08-30 05:03:18

标签: c# data-structures

我将在问题的前言,说我对.NET世界有些新意,可能会遗漏一些完全明显的东西。如果是这样,我很想听听那是什么!

我经常发现自己编写的小程序都或多或少地做了同样的事情:

  1. 从一个或多个文件中读取数据
  2. 将此数据存储在内存中,某种容器中
  3. 将数据,输出分析结果压缩到文本文件并退出
  4. 我经常发现自己创建了看起来很怪异的容器来存储所说的数据。 E.g:

    Dictionary<DateTime, SortedDictionary<ItemType, List<int>>> allItemTypesAndPropertiesByDate =
                new Dictionary<DateTime, SortedDictionary<ItemType, List<int>>>();
    

    这是有效的,因为数据结构或多或少准确地描述了我的意图 - 我希望能够按日期访问项目类型和属性。尽管如此,我觉得存储容器与输出数据格式的关系太紧(如果明天我决定要查找具有某些属性的项目的所有日期,则此数据结构将成为一种负担)。通常,在线下进行输入和输出更改是耗时且容易出错的。另外,我必须继续盯着这些丑陋的声明 - 迭代它们的代码也不是很好。

    在复杂性范围的另一端,我可以创建一个带有模式的SQL数据库,该模式以更灵活的格式描述输入,然后对数据库运行查询(使用SQL或LINQ to SQL)。这当然有效,但感觉太大了 - 我写了很多这样的程序,并且不想为每个程序创建一个数据库,管理SQL依赖(即使它是本地机器上的SQL express),等等我不需要实际持久保存数据 - 只需将其读入,将其保存在内存中,进行一些查询并退出。即使使用内存中的SQLite实例也感觉有点矫枉过正。我并不过分担心运行时性能 - 这些通常只是很少的本地机器实验 - 但它只是感觉错误。

    理想情况下,我想要的是具有低开销的内存行存储,其中具有松散定义的模式,该模式很容易被LINQ查询,并且只需要几行代码来设置和使用。 Microsoft .NET 4堆栈是否包含这样的内容?如果你发现自己处于类似的困境,你会做什么?

    感谢您的意见 - 谢谢!

    亚历

4 个答案:

答案 0 :(得分:1)

如果您发现数据库结构更易于使用,一个选项可能是使用表示您的架构的DataTables创建一个DataSet,然后您可以使用Linq 2 DataSets

进行查询

答案 1 :(得分:0)

或者您可以尝试使用db4o之类的对象数据库;它们存储您将使用的实际对象,帮助您以更加面向对象的方式进行编程,并且它非常容易使用。此外,它不是传统意义上的数据库服务器 - 它使用平面文件作为容器,直接从/向它们读/写。

答案 2 :(得分:0)

为什么不直接使用linq?

您可以将数据读入平面列表,然后链接一些linq语句以获得所需的结构。

如果我遗漏了某些内容,请道歉,但我认为你不需要中间人。

答案 3 :(得分:0)

比较数据库和OOP,表定义对应于类定义,记录是对象,表数据是任何类型的对象集合。

我的方法是定义表示文件内容的类和属性,将每个文件条目解析为一个对象,并将这些对象添加到List&lt; T&GT;

然后可以使用Linq查询此列表。