【问题标题】:Choice of database for a voting application为投票应用程序选择数据库
【发布时间】:2012-05-27 17:43:54
【问题描述】:

我看到很多主题要求为投票机制选择数据库,但我的输入有点不同。我有一个包含 GUI 的应用程序,其中可以有多个字段/单选按钮或上述组合。 GUI 不固定。根据提交的表单,动态生成答案 XML。

因此,如果有一个表单,可能会有 10000 个不同的人提交同一个表单。我将拥有 10000 种不同的表格(数量会增加)。

我现在有以下 2 个选项。将每个 xml 原样存储在数据库中(我没有选择使用关系数据库或像 mongodb 这样的 nosql 数据库。)或解析 xml 并为每个表单创建表。这样表的数量将是巨大的。

现在,我必须建立一个投票机制,它基本上查看为特定表单生成的所有 xml,即 10000 个 xml,并提取提交的答案(注意:xml 很复杂,因为 1 个表单可以有多个答案元素) 然后进行投票,看看有多少人给出了相同的答案。

我的问题:

  1. 我应该使用关系数据库还是 NOSQL(MongoDB /Redis 或类似数据库)?
  2. 我需要将 xml 文档原样保存在数据库中,还是应该对其进行解析并将其转换为表格并保存?我可以遵循的任何其他方法。

我目前正在使用 JAVA/J2EE 进行开发。

【问题讨论】:

    标签: database database-design architecture nosql voting-system


    【解决方案1】:

    如果您的问题是关于如何存储可变结构的数据,那么文档数据库将非常方便。由于它是无模式的,因此 rdbms 列维护不会有任何问题。

    从逻辑上讲,这种方式与将 xml 存储在关系数据库中非常相似。不同之处在于,使用 rdbms 方法,每个数据库读取器都应该有一个特殊的 xml 解析层。 (还有关于xml的你参考Why would I ever choose to store and manipulate XML in a relational database?。)

    一般来说,如果您打算拥有一个单一的数据库客户端,您可以使用 xml/rdbms。

    顺便说一句,除了存储 xml,您还可以通过其他方式使用 rdbms - 定义“通用”结构。例如,您可以有“Entities (name, type, id)”表和“Attributes (entityId, name, type, value)”。

    【讨论】:

      【解决方案2】:

      如果您将 XML 存储在数据库中 - 您将获得性能和可维护性方面的灵活性(使用 xpath 等进行 XML 解析可能很冗长且容易出错,尤其是对于复杂且深度嵌套的 XML 结构)

      如果您为每个 XML 存储表 - 您可以获得性能、易用性、复杂性和灵活性

      选择一种混合方法。将 XML 作为通用 XML 结构存储在 rdbms 表中(如答案之一中所建议)。这样您就可以拥有更少的表(更简单的复杂性)并避免 XML 解析的所有性能问题。

      【讨论】:

        猜你喜欢
        • 2018-11-06
        • 2011-07-31
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2014-01-27
        • 2019-06-16
        • 1970-01-01
        • 2020-10-24
        相关资源
        最近更新 更多