有效地存储不规则/重复间隔(想想日历/事件)

Mad*_*sRC 9 postgresql database-design time

我正在开发一项服务,该服务依赖于用户能够接收他们自己选择的消息。这些消息在发送进行处理之前需要存储在某处。

现在我将它们存储在 postgres 数据库中,但我觉得它不能很好地扩展。

目前的布局是:

ID - MESSAGE - DATE - TIME
Run Code Online (Sandbox Code Playgroud)

DATE 和 TIME 字段保存应该发送消息进行处理的时间和日期。这不能很好地扩展,好像需要在每个月的第一个星期一发送一条消息,它会占用 12 倍的空间。

问题是我似乎无法找到另一种方式来表示何时应该发送消息进行处理?理想情况下,我希望能够在一行中表示每个日期。

我们也在讨论使用 Redis,但很快就决定不使用,因为我们需要 webfrontend 的数据库。

任何人都知道如何优化消息存储?如何表示何时应该发送消息进行处理?

我也愿意就如何解决这个问题提出任何其他建议。

Nei*_*gan 13

  1. 始终寻找支持您要求的标准。支持重复日历事件的标准是什么?ICalendar 规则:

    http://en.wikipedia.org/wiki/ICalendar

    http://www.kanzaki.com/docs/ical/rrule.html

    您可以将规则存储为纯文本并根据需要对其进行解析,或者为它们使用数据库模式:

    SQL 架构:https : //stackoverflow.com/questions/1054201/ical-field-list-for-database-schema-based-on-ical-standard/1397019#1397019

    Perl:http : //search.cpan.org/~rfrankel/iCal-Parser-1.16/lib/iCal/Parser.pm

    PostgreSQL 特有的:http : //svn.expressolivre.org/contrib/davical/dba/rrule_functions-8.1.sql

  2. 在性能方面,您可以使用物化视图来计算事件,比如提前一个月和一个月前(如果需要):

    /sf/ask/296791001/#10151804

附加信息:http : //www.vertabelo.com/blog/technical-articles/again-and-again-managing-recurring-events-in-a-data-model 本文解释了重复事件的方方面面。在得出任何结论之前,请先阅读它。