Re:PG: What's your current take on reddit's comment system?
by nostrademons on Thursday July 12, 2007 @10:14PM
(#33957)
Sure you could. You could also select all comments on the item and rebuild the tree in-memory, as Vlad suggests elsewhere on this thread. The code isn't even as hard as I'd thought it'd be:
comments = dbh.query('SELECT * FROM comments WHERE news_id = $newsid')
response_tree = {}
for comment in comments:
comment.children = []
response_tree[comment.id] = comment
for comment in comments:
response_tree[comment.parent_id].children.append(comment)
The nifty thing about storing it in the database is that you need no application-level post-processing, you can take advantage of the DB for ad-hoc queries (what if you want to show subtrees of all posts by a certain user, like the "threads" page here?), and it happens to map to a set of simple and fast operations provided by most databases.
Re:PG: What's your current take on reddit's comment system?
by Jd on Thursday July 12, 2007 @11:02PM
(#33965)
After some reflection, I suppose my only hesitation with this method is that it locks one into dealing with the comments in a particular way, whereas the lisp model I outlined is easily adaptable to a variety of schemas.
However, I'm not sure how else one would want to model things. Must think more...
Re:PG: What's your current take on reddit's comment system?
by twism on Saturday August 18, 2007 @05:17PM
(#43889)
This is closely resembles the way i did it... With recurrsive includes (views). Performs flawlessly.
Re:PG: What's your current take on reddit's comment system?
by euccastro on Friday July 13, 2007 @03:22PM
(#34100)
Why are you using a database, in this case? Aren't you better off serializing your tree using the native methods of your language? (e.g., with pickle.dump() in Python.)
Re:PG: What's your current take on reddit's comment system?
by nostrademons on Friday July 13, 2007 @10:17PM
(#34156)
Database for searching for by the item (news story, game, journal entry), pickle or sexprs for the individual comment threads. The database helps you manage the hopefully large number of news stories you'll get. The tree takes care of individual comments for a single news story.
Many filesystems have trouble with large numbers of files in a single directory, as you'd get with eg. pickle tree to a file per item.
Re:PG: What's your current take on reddit's comment system?
by Jd on Friday July 13, 2007 @11:16PM
(#34164)
Is this what you are actually doing? How do you store the pickle output?
Re:PG: What's your current take on reddit's comment system?
by nostrademons on Saturday July 14, 2007 @10:28AM
(#34209)
I'm not - I'm using the approach here: http://news.ycombinator.com/item?id=33888 . That gives me much more flexibility in picking out individual comments from a thread, returning all comments by a specific user, getting all comments posted today, etc. I'm just recognizing this as another possible way to solve the problem, if you don't care about the extra functionality..
As for storing the pickled output:
dbh.execute('UPDATE articles SET comments = $comments WHERE news_id = $id',
comments=pickle.dumps(article.comments))
The comments field can be a normal TEXT field, since the default format for pickle is ASCII-based.
Re:PG: What's your current take on reddit's comment system?
by Jd on Saturday July 14, 2007 @02:36PM
(#34234)
Okay, makes sense. I hadn't read your earlier posting that carefully before, but it sounds better than what I had in mind.
Edit: See Ruby/Lisp for one such already built interpreter.