物理硬件的数据库设计

时间:2009-05-27 21:52:59

标签: database hardware sqlite physics

我必须为独特的环境开发数据库。我没有数据库设计的经验,可以利用每个人的智慧。

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

设置:

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

    • 数据库将提供当前参数与上次运行期间使用的参数之间的差异。
    • 在新运行开始时,将最新的数据库更改加载到硬件中。
    • 用于即将进行的运行的设置必须使用运行编号和当前日期和时间进行标记。这很重要。我需要一个实验设置的逐行历史记录。
  • 会有几个不同的客户端同时读写数据库。虽然对数据库的更改很少,但我无法保证更改不会同时发生。

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

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

欢迎提示和建议。

谢谢,

肖恩


更新1

数据库访问

有三个可以写入和读取数据库的lite应用程序和一个只能读取的应用程序。

具有写访问权限的应用程序负责设置硬件参数的非重叠子集。具体来说,我们有一个应用程序(其中可能有多个副本)设置高电压,一个应用程序设置可能在实验期间更改的硬件参数的其余部分,以及一个GUI设置其余参数这几乎是静态的,只对正确重建数据至关重要。

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

备份

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

3 个答案:

答案 0 :(得分:1)

设计的一些基本内容;你应该确保你不删除任何表中的数据;跟踪最新数据(可能最适合最近更新的日期时间);但是,当数据值发生变化时,请勿删除旧数据。启动运行时,标记与运行ID一起使用的每个表(在另一列中);通过这种方式,您可以保留关于每个设置的完整历史记录,并且可以准确地确定在给定运行中使用的状态。

答案 1 :(得分:1)

询问你的同事。

你没有说你正在做什么样的物理,或者工作组有多大,但在我的学科(粒子物理学)中,有一个深入的经验库,可以建立和运行这种类型的系统(我们称之为“慢控制”和类似的)。你工作的人很可能已经完成了这项工作,或者知道有人。可能会有人对论文的最后一次进行详细描述。

我个人并没有太多关于此事,但我确实知道这一点:一个常见的功能是采用no-delete-no-overwrite设计。您只能添加数据,永远不会将其删除。这样可以保留在遇到问题时找出真正发生的事情的机会


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

答案 2 :(得分:0)

根据事物的声音,这不是一个特别大的数据库。因此,您可以使用Oracle's free database,这将为您提供各种极大的灵活性,包括日记(不确定这是否是真正的单词)和管理。

在您说“将有几个不同的客户端同时读取和写入数据库”之后,您提到'不可腐败的'权利“给我带来了一个危险信号。您是否计划创建某种具有此接口的应用程序?或者您是否计划通过TOAD等工具直接访问数据库?

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

备份?是的,一点没错!您不仅应该进行每日,每周和每月备份,还应该完成和增量备份。此外,经常测试您的备份映像以确认它们实际上正在工作。

至于数据结构,我需要更详细地介绍您要存储的内容以及如何访问它。但是从你放在这里的内容我会说你需要下面的表(开头):

Detectors
Parameters
Detector_Parameters

一些补充说明:

由于您将进行如此多的更改,我建议您使用SVN之类的版本控制来跟踪所有DDL等。我还建议使用bugzilla之类的内容进行错误跟踪(如果需要) )并使用google docs进行团队文档管理。

希望有所帮助。