[erlang-questions] What's the best way to select articles by page in a forum?

Liu Yubao yubao.liu@REDACTED
Mon Jan 12 10:54:58 CET 2009


I'm trying to implement a web forum with Erlang + Mnesia and meet a big difficult
problem. This is the record to represent an article:

  -record(article, {id, parent_id, topic_id, author, title, content, timestamp}).

For a new article:
    id = md5(author + title + timestamp).
    parent_id = <<0>>.
    topic_id = id.

For a reply:
    parent_id = parent's id.
    topic_id = parent's topic_id.
    id = md5(parent_id + topic_id + author + title + timestamp).

I use md5 digests instead of monotone increasing integers as id because I hope
there is no centralized counter that is bad for concurrency and distribution.

Now the problem is how I select [N, N + 20) topics efficiently and how I select
[N, N + 20) articles in a topic efficiently.

In SQL I can do like this:

	SELECT * FROM article WHERE id = topic_id ORDER BY timestamp
        SELECT * FROM article WHERE topic_id = ? ORDER BY timestamp

and then read the result *one by one*, but it seems mnesia doesn't support this
traverse, it only support two kinds of traverse:

   * traverse whole table
     (not efficient)
   * get the whole result set immediately and traverse records in it
    (consume many memory)

Any suggestion is appreciated!

Best regards,

Liu Yubao

More information about the erlang-questions mailing list