【问题标题】:Erlang: 2 database on 2 webserver?Erlang:2个网络服务器上的2个数据库?
【发布时间】:2010-03-12 14:51:34
【问题描述】:

我用 php+postgresql 创建了一个博客系统。 现在我想添加一个网络聊天(同时为数百万用户实时),其中每条消息都保存在数据库中。

我正在考虑在不同的网络服务器上使用 Erlang+Mnesia 来解决这个问题。

消息的表格会是这样的:

message_id、user_id、消息、日期

user_id 应该与另一个网络服务器的 Postgresql 数据库中的 users 表相关。

如何在不损失性能的情况下做到这一点?

如果您有任何其他创造性的解决方案,请告诉我;)。

【问题讨论】:

    标签: database postgresql erlang webserver real-time


    【解决方案1】:

    我不确定您为什么要将每条消息都保存在数据库中,但 mnesia 听起来并不是一个特别好的选择。 Mnesia 更像是一个分布式键值存储,当您需要以简单到中等复杂的方式存储“表格数据”并查询它时,您可以使用它来保持应用程序的状态。

    对于大量文本,我听说 lucene 应该很好,它具有全文搜索功能等,据说效率很高,您可能想研究一下:

    Apache Lucene Project page

    除此之外,使用 erlang 作为聊天服务器,使用 mnesia 来保存所有其他状态听起来是个好主意,您可以编写一个使用 JSONP(克服跨域问题)和 mochiweb 之类的 JavaScript 客户端erlang 站点做 webserver 部分。

    编写核心聊天系统的其余部分应该相当简单,有趣的部分,可以这么说:)

    【讨论】:

    • 我不会说 mnesia 不适合这种情况。这取决于他是否需要全文搜索。正如他所描述的那样查询消息表在 mnesia 中非常容易实现,并且一个完整的关系数据库对于他的需求来说太过分了。 Lucene 没有实现存储,它只是为该存储提供索引服务。他仍然需要一个数据存储来保存它。
    • 嗯,听起来他想存储大量数据,而 mnesia 不太适合这样做,但是是的,这是可行的。但正如你所说,这有点取决于他究竟想以何种方式使用存储的数据。
    【解决方案2】:

    Mnesia 当然可以按照您的建议进行操作,但是如果您已经设置了 postgres,是否有某些原因不想使用它?它可能比创建一个完整的单独服务更简单,如果您希望 erlang 运行聊天服务,那么它具有 postgres 驱动程序。

    【讨论】:

    • 如果我在 erlang 网络服务器上使用 postgresql,那么如何将消息表的 user_id 与用户表关联起来?
    • 我的意思是为每个数据库使用相同的数据库。 erlang 网络服务器可以与不同服务器上的 postgres 数据库通信。
    【解决方案3】:

    这个项目使用 postgresql 取得了巨大的成功。

    http://zotonic.com/

    您可能希望使用相同的代码来访问 postgresql 的 db。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2013-10-13
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多