【问题标题】:Database design, real time or batch processing数据库设计,实时或批处理
【发布时间】:2011-11-30 12:49:16
【问题描述】:

我面临如何更新数据库的两种选择,不知道哪一种更适合我的情况。数据库中有三个表,用于读取/存储一些用户的信息,例如 url 历史记录或一些输入。 用户可以实时访问数据库,因此该用户可以立即看到对数据库所做的更改。 批处理对用户隐藏“更新”,通过解析日志文件更新数据库,这样的过程每 X 小时运行一次。所以用户只能在 X 小时后看到他们的更改。

除了用户可以看到的同步/异步更新的优点/缺点之外。选择实时或批处理更新方法进行数据库更新还有哪些其他好处?

谢谢

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    这完全取决于您期望的流量。如果您想扩展您的应用程序,始终建议使用异步处理。但这并不意味着您的用户必须等待 X 小时。您可以让该过程每 5 分钟甚至每分钟运行一次。

    这样可以减少并发问题,同时用户可以稍微延迟查看他们更新的历史记录。

    查看本书Scalability Rules中的可扩展性最佳实践

    【讨论】:

    • 感谢“减少并发问题”+1。在我的例子中,数据库中有三个表,这三个表中的每条记录都有用户电子邮件作为主/外键,所以用户只能修改自己的数据,用户之间没有数据共享。并发冲突可能会发生,但如果我是对的,这不太可能发生。
    【解决方案2】:

    我建议您使用使用中间件的 EDA(事件驱动架构) “粘合”所有这些。

    http://searchsoa.techtarget.com/definition/event-driven-architecture

    一个建议:远离批处理。

    今天,一切都变得越来越实时。想象一下,如果您能在 X 小时内收到我的答复……您会满意吗? :)

    如果您向我们提供更多信息,我们也可以为您提供更多帮助。

    我看到您的输入来自日志文件?这可以改变吗? 你也可以实现观察者模式。

    【讨论】:

    • 谢谢,输入来自日志文件。更改?这个我还没想过,怎么改?
    • 我真正的问题是:日志文件来自哪里?它在数据库服务器/Web 服务器/其他应用服务器上吗?您可以轻松地使用 JMS、JAXB 来完成所有这些工作。
    • 日志文件来自网络服务器 (Tomcat)。
    • 与其将信息写入日志文件,不如扩展 AccessLogValve 并使用观察者模式或 JMS 将信息推送到您的数据库。以下是关于 accessLogValve 的一些信息:tomcat.apache.org/tomcat-7.0-doc/config/…
    • 谢谢,这是个好主意。我会试试。谢谢。
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多