不使用数据库但在内存对象中使用是不是很糟糕?

时间:2010-03-01 21:56:28

标签: .net sql

我的任务是编写一个供单个用户使用的小应用程序。这个应用程序将从我们的主员工DB中提取约500个员工姓名/部门。然后,用户将为每个员工输入5个字段。这5个字段通常每年只更改一次,但最坏情况可能是每月一次。我应该在任何给定的时间跟踪2年的价值。

我看过SQLite和SQL CE,我对其中任何一个都不感兴趣。 SQL CE不希望允许数据文件驻留在网络共享上。 (只有一个用户,但他们将所有文档存储在每天备份的私有共享上)。

SQLite似乎更适合该法案但它没有包装或任何东西也没有集成到Visual Studio中。

另一件需要考虑的事情是,我们的人员精通MS的SQL Server而其他方面很少,因此他们对SQLlite的理解对我的老板来说将是一件重要的事情。

所以我的问题是:如果我将数据存储在内存中的对象并在保存时将它们序列化为磁盘怎么办?我做了一个快速测试,有10k人(我们的使用量最多只有500-1000)和10年(如果他们每个月更新他们的数据10个月,非常不可能)只会导致我的演示应用程序使用30MB记忆。即使使用GUID随机填充所有字符串,也填充该数据是即时的。这是一个坏主意吗?它是一个相当简单的应用程序,在这种情况下,它对我来说似乎没问题。

9 个答案:

答案 0 :(得分:6)

我发现使用对象序列化来保存业务数据的想法存在一些问题:

这些不一定是这个想法的阻止者,而是需要考虑的事情......

  1. 无法查询,报告或检查数据。它完全不透明地被应用程序捕获。
  2. 调试序列化数据比查看数据库中的相应数据甚至像CSV这样的格式更难。
  3. 没有原子性 - 一次电源故障或应用程序崩溃可能会破坏整个“数据库”。
  4. 如果数据模型发生更改,则更新现有的持久化实体需要一个可以读取旧格式和新格式的应用程序版本。使用数据库,您只需添加一个列(或子表)。
  5. 没有干净的方法来实现并发访问。如果有多个用户想要查看或编辑数据,会发生什么?
  6. 我学到的一点是,小型应用程序往往会增长并成为“大型应用程序”。当组织对应用程序的潜在价值进行错误猜测时,它们往往会产生成本这种意外的,有机的增长后来。

    你还提到你喜欢SQLLite并且不喜欢它。你不喜欢什么?你期待什么样的问题?

    如果您只是想找到一种“偷工减料”的方法来更快地完成这项工作 - 这在短期内可能会好起来 - 但要小心 - 这些决定有可能回到咬您的。

答案 1 :(得分:2)

通过序列化丢失的数据:

  • SQL式搜索
  • 插入/更新/删除个人记录的能力
  • 众所周知和理解
  • 不是语言特定的
  • 其他和非本地应用程序的可访问性

你获得了

  • 易于编码
  • 简单备份(确保您已考虑备份!)
  • 更少的依赖

根据您对目标和限制的描述,我无法看到您的方法存在任何具体问题。

另一种想法。这听起来像是在保存一个类似于表的简单数据结构,因此您可能想要将其保存为人类可读的形式,如逗号分隔值文件甚至XML。这样你就不依赖于你目前使用的语言。

答案 2 :(得分:1)

多年来,我见过许多小型应用程序,供单个用户使用。 (很长一段时间,由于某种原因,他们都有访问后端)。它们总是成为几个用户使用的大型应用程序。

但真正的问题不是它会有多大,而是如何使用数据。通常,人们存储数据是因为他们以后想要查看数据,这通常意味着报告,这意味着关系数据库系统将是一件非常棒的事情!

答案 3 :(得分:0)

您自己的测试表明它应该有效。但是,我强烈建议抽象出你的数据层,这样如果需要更换它,你可以快速轻松地完成。如果您发现只想在对象上添加一些SQL,可以查看Linq to Objects

答案 4 :(得分:0)

将数据存储在数据库中还有一些其他好处,例如从其他应用程序或简单的数据库编辑器读取数据。如果将来任何其他应用程序想要重用数据,那么比从java对象反序列化更容易。此外,您还必须处理对象的版本控制,如果您使用java对象使用它,查询将很困难。

答案 5 :(得分:0)

如果原始数据位于您加载的SQL Server中,那么users versed in MS' SQL Server之一是否会尝试选择您的应用所做的更改?如果你将它存放在其他地方,他们将永远找不到它。

如何存储此数据的内容不是原始数据库有助于业务?还是会阻碍业务发展?你需要决定,然后从那里解决问题。不是我如何更容易/最好地完成这项任务。

答案 6 :(得分:0)

将您的数据存储在数据库中!使用数据层对其进行去耦。如果需要,可以使用ORM,也可以只使用普通的旧存储库,但不要使用文本文件,xml文件,json文件来存储这类信息。

  

如果有,可以使用SQL Server,   使用它,这是有原因的。

答案 7 :(得分:0)

如果你可以在master数据库中存储这5个额外的数据字段,那么这似乎是理想的。

如果你不能,你可能只是给他们一个带有某种扩展或宏的Excel文件,用于从数据库中获取数据。 Excel为您提供了许多众所周知的打印,排序,绘图等功能。除了更新这5个字段之外,你还没有告诉我们应用程序应该做些什么。

如果你为此编写一个.net应用程序并且没有使用数据库,那么至少使用XML序列化将数据以XML格式存储。

答案 8 :(得分:0)

从您的理由来看,您当然可以使用文件,但在我看来,使用数据库后端,它将更具可扩展性。我们通常从一个项目开始,我们认为我们知道它的所有要求并且永远不会改变,但事实并非如此。在您的设计中,如果用户要求添加其他字段,则必须再次自定义代码以处理序列化的固定长度/二进制字段。 SQLite有很好的支持,他们甚至是LinQ提供商。

我认真地认为,针对上述要求实施项目的最简单方法是创建Access Form。定义字段,然后使用向导在访问中创建表单。只需很少的努力,您就可以在实现可扩展性的同时实现整个任务。