我需要避免在数据库中重叠日期范围。我希望这是数据库不可知的 - 即使它不是数据库的角色也是一个很难的问题(http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%图3a%3A%3aP11_QUESTION_ID:474221407101)。我只有一个应用程序写入数据库。其他一些人正在阅读它,其中读取性能至关重要。写作的应用程序是线程化的 - 它是一个Web应用程序 - 并且在一个集群中。
所以,我认为最简单的方法就是确保一次只写一个进程。这是正确的方法吗?如果是这样,我应该只有一个单独的线程应用程序来侦听某个请求队列并按照它们接收它们的顺序处理这些请求吗?无论如何,我在数据库中拥有所有这些请求,并且只是考虑使用created_at日期和状态来处理它们。
答案 0 :(得分:0)
解决此问题的一种方法是设置一个表格,其中包含DATE
值的所有日期。像这样的东西:
CREATE TABLE MY_SCHEDULER (
SCHEDULED_DATE DATE PRIMARY KEY,
OWNER_ID NUMBER(8)
);
SCHEDULED_DATE
代表一天,并且会以00:00
的时间存储。主键完整性将确保不能插入具有相同SCHEDULED_DATE
的两个记录。 OWNER_ID
是对“拥有”该日期的人的引用。鉴于DATE
变量在Oracle中是7个字节,并且数量不是太大(最多22个字节),您应该没有存储问题。 100年的日期只有大约10 MB!