【问题标题】:Database design for physics hardware物理硬件的数据库设计
【发布时间】:2009-05-28 07:45:54
【问题描述】:

我必须为独特的环境开发一个数据库。我没有数据库设计经验,可以借鉴大家的智慧。

我的团队正在为一块物理硬件和一个数据采集系统设计一个数据库。我们需要一个系统来存储所有硬件配置参数,并在用户更改这些参数时跟踪它们的变化。

设置:

  • 我们有近 200 个检测器和大约 40 个与每个检测器相关的参数。在这 40 个参数中,我们预计只有少数会在实验过程中发生变化。与单个检测器相关的大多数参数都是静态的。
  • 我们在定时运行中收集此实验的数据。在这些运行期间,加载到硬件中的参数不得更改,尽管我们应该能够随时编辑数据库以准备下一次运行。目前的计划:

    • 数据库将提供当前参数与上次运行期间使用的参数之间的差异。
    • 在新运行开始时,最新的数据库更改会加载到硬件中。
    • 用于即将运行的设置必须标有运行编号和当前日期和时间。这是必不可少的。我需要一份实验设置的运行历史记录。
  • 将有几个不同的客户端同时读取和写入数据库。尽管对数据库的更改并不频繁,但我不能保证这些更改不会同时发生。

  • 必须健壮且不可损坏。实验系统的配置取决于硬件。数据库的任何故障都会阻止数据采集,而且我们的时间很昂贵。数据库备份?

我目前的计划是使用 sqlite 数据库来实现上述要求,尽管我不确定它是否可以支持我的所有要求。还有其他我应该研究的技术吗?有没有人做过类似的事情?我愿意学习任何技术,只要它成熟。

欢迎提示和建议。

谢谢,

肖恩


更新 1

数据库访问

有三个轻量级应用程序可以写入和读取数据库,一个应用程序只能读取。

具有写访问权限的应用程序负责设置硬件参数的非重叠子集。具体来说,我们有一个应用程序(其中可能有多个副本)设置高电压,一个应用程序设置其余硬件参数,这些参数可能在实验过程中发生变化,还有一个 GUI 设置其余参数它们几乎是静态的,仅对正确重建数据至关重要。

只有读取权限的程序是我们的数据分析软件。它需要访问数据库中几乎所有的参数,才能将传入的数据正确格式化为我们可以正确分析的内容。与数据库的连接数应大于 10。

备份

我们实验室的另一个设置每次运行都会转储一个 xml 文件。尽管我认为 xml 不合适,但我计划每次运行都备份系统,以防万一。

【问题讨论】:

  • 您多久进行一次实验?是每秒几次,几分钟一次,还是一天几次?您多久更改一次参数?每次运行,或每 1000 次运行,还是?这些会影响数据库的大小,从而影响实现。

标签: database hardware sqlite physics


【解决方案1】:

关于设计的一些基本知识;您应该确保不要从任何表中删除数据;跟踪最新数据(可能最好使用最新更新的日期时间);但是,当数据值发生变化时,不要删除旧数据。启动运行时,使用运行 ID 标记每个使用的表(在另一列中);这样,您就可以维护每个设置的完整历史记录,并且可以准确地确定给定运行时使用的状态。

【讨论】:

    【解决方案2】:

    问问你的同事。

    你没有说你在做什么样的物理学,或者工作组有多大,但在我的学科(粒子物理学)中,有一个深厚的经验库,就是建立和运行这种类型的系统(我们称之为“慢速控制”等)。与您一起工作的人很有可能已经这样做了,或者认识这样做的人。在某人的论文中可能有关于最后一次退出的详细描述。

    我个人对此并没有太大的关系,但我确实知道这一点:一个共同的特点是具有不删除不覆盖设计。您只能添加数据,永远不要删除它。这可以让您在遇到麻烦时找出真正发生的事情的机会


    也许我应该再解释一下。虽然这是一项重要的任务并且必须正确完成,但它与物理并没有真正的关系,因此您无法在 SpiresarXive.org 上查找它。没有人写关于中型慢速控制数据库的设计和实现的论文。但他们有时确实把它放在他们的论文中。真正找到指针的最简单方法是询问实验室周围的一群人。

    【讨论】:

    • 感谢您的回复。我在核物理。我做了一个温和的文献搜索,实际上大部分可用的信息都来自高能社区。我遇到的问题是规模问题。我们设备的复杂性和支持的社区比围绕许多高能设备的军队低 1-2 个数量级。如果您需要进一步说明,我可以提供。
    • 我也不属于高能社区。寻找 JLAB、SLAC、地下中微子实验和其他中小型项目的工作。更像你的体重秤。
    【解决方案3】:

    从事物的声音来看,这不是一个特别大的数据库。因此,您也许可以使用 Oracle's free database,这将为您在日记(不确定这是否是一个实际单词)和管理方面提供各种极大的灵活性。

    在您说“将有几个不同的客户端同时读取和写入数据库”之后,您就提到了“不可损坏”,这对我来说是一个危险信号。您是否打算创建某种具有此接口的应用程序?还是您打算通过 TOAD 之类的工具直接访问数据库?

    为了保持您的数据完整性,您需要严格控制您的权限。我只允许一个(和一个备份)人拥有管理员权限,能够在 GUI 之外进行数据操作(这将使您的生活更轻松)。

    备份?是的,一点没错!您不仅应该进行每日、每周和每月备份,还应该进行完整备份和增量备份。此外,请经常测试您的备用图片,以确认它们确实有效。

    至于数据结构,我需要更详细地说明您要存储的内容以及如何访问它。但是根据您在这里的说明,我想说您需要以下表格(开始):

    Detectors
    Parameters
    Detector_Parameters
    

    一些补充说明:

    由于您将进行如此多的更改,我建议您使用像 SVN 这样的版本控制来跟踪您的所有 DDL 等。我还建议使用像 bugzilla 这样的东西来跟踪错误(如果需要)并使用 @ 987654324@ 用于团队文档管理。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多