将静态数据存储在数组或数据库中?

时间:2009-11-05 12:37:43

标签: database

我们总是有一些静态数据可以作为数组存储在文件中,也可以存储在基于Web的项目的数据库表中。那么应该首选哪一个?

在我看来,数组有一些优点:

  1. 更灵活(可以是任何结构,指定非常复杂的关系)
  2. 更好的性能(它将被加载到内存中,与数据库的I / O操作相比,它具有更好的读/写性能)
  3. 但我的同事认为他更喜欢数据库方法,因为它可以保持统一的数据持久性接口,并且更灵活。

    那么应该首选哪个?或者我们如何选择?或者我们应该在某些场景中选择一个而在其他场景中更喜欢?场景是什么?

    编辑:

    让我澄清一下。正如本杰明对标题所做的更改一样,我们想要存储在数组(文件)中的数据不会经常更改,这意味着代码不会更改运行时数组的值。如果数据变化非常频繁我无疑会使用DB。这就是我做这样一个帖子的原因。

    有时很难存储一些非常复杂的关系,例如:

    Task = {
      "1" : {
        "name" : "xx",
        "requirement" : {
              "level" : 5,
              "money" : 100,
         }
       ...
     }
    

    就像上面的代码示例(python dict或者你可以把它想象成一个数组)一样,需求字段很难存储在DB中(直接在DB中存储像pickle对象这样的结构?我觉得不太好)。所以在这种情况下,我会更喜欢数组。

    那么你的想法是什么?在这种情况下,我们应该更喜欢数组到DB,对吗?

    问候。

6 个答案:

答案 0 :(得分:5)

让我务实/客观:

  • 您是否在运行时写入数据?是:Db,否:文件
  • 您是否每周更新一次数据?是:Db,否:文件
  • 发布更新的数据文件很痛苦?是的:Db,No:文件,
  • 您经常阅读这些数据吗?是:文件/缓存,编号:Db
  • 更新该数据文件并且需要额外的工具是一件痛苦的事吗?是:db,No:文件

当然,我已经忘记了其他一些观点,但我想基础知识就在那里。

答案 1 :(得分:3)

文件中的“灵活”数组充满了使用数据库已经解决的大量问题。除非您能够证明数据库确实比使用其他方法更慢,否则请使用数据库。继续前进并开始解决业务问题。

修改

OP的评论询问使用文件的问题是什么,这里有一些(暂停深呼吸)。

  • 并发:您必须管理多个请求可能尝试写回文件的情况。不太难但它会成为瓶颈。
  • 性能:是的,修改内存数组的速度更快,但是如何确定数组需要持久保存到文件的数量和时间。请注意,使用DB不会预先使用适当的内存缓存。每次进行小的修改时写回文件都不会很好。
  • 可扩展性:真正的前两个功能。为了实现任何可扩展的目标,您需要能够快速修改持久存储的小数据。 IWO如果你不使用数据库,你最终会写一个。如果您发现需要多个Web服务器来支持不断增长的需求,您将在哪里存储文件?现在你已经通过网络获得了文件I / O(很可能是一个非常快的)。
  • 结构:如果使用数组,您的代码将负责管理数据结构,查询数据等。你将如何以比使用数据库更大的“灵活性”的方式做到这一点?这里需要各种选择和复杂性。
  • 可靠性:您需要确保持久数据的完整性。如果发生某些故障,您的阵列/文件代码将需要确保数据至少不会破坏应用程序可以继续。

答案 2 :(得分:2)

你的同事是对的,但是你需要放下comp sci教科书并务实。您多久会从您的应用程序访问这些数据?如果频繁,则不会产生访问开销的成本。您不仅可以从平面文件中读取数据,还可以获得数据库的优势,而是在应用程序中使用缓存策略。根据您的开发语言,您可以查看memcache或jtreecache等内容。

答案 3 :(得分:0)

这取决于您正在查看的数据类型,以及是否需要定期更新。

我倾向于在数据库中保留大部分内容(非配置数据),即使数据不会重复(例如行的thosands)。数据库的扩展比平面文件容易得多,如果系统开始快速增长,平面文件可能会成为系统的负担。

答案 4 :(得分:0)

如果数据没有很大的变化,并且您的Java编程,为什么不使用Spring来保存值?

它们可以注入你的bean,并且很容易改变。

但如果你用Java开发那就好了。

答案 5 :(得分:0)

是的,我同意您的隐含评估,即数据库被过度使用,基本平面文件可能在多种情况下都有效。如果您的应用程序是只读的(并且在应用程序重新启动时由管理员完成写入),我肯定会使用该文件。即使应用程序写入文件,但只在附加模式(相对于随机插入/更新)在一个线程中,我也会使用文件。还有别的 - 需要一个真正的数据库,包括随机更新,查询,并发控制等。