4 ms·
Just thinking off the cuff here, but couldn't one store a lisp-style list as a string in a relational database. If I was using Ruby on Rails, I could simply bu
by Jd 19y ago
Just thinking off the cuff here, but couldn't one store a lisp-style list as a string in a relational database. If I was using Ruby on Rails, I could simply build a simple lisp interpreter in Ruby to parse the string, then capture it as an in-memory tree. This way I would only have active items in memory and could use some of the advantages of the standard web development platforms for whatever else I was doing.
Edit: See Ruby/Lisp for one such already built interpreter.
- nostrademons 19y agoSure 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.
- Jd 19y agoAfter 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...
- twism 19y agoThis is closely resembles the way i did it... With recurrsive includes (views). Performs flawlessly.
- euccastro 19y agoWhy 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.)
- nostrademons 19y agoDatabase 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.
- Jd 19y agoIs this what you are actually doing? How do you store the pickle output?
- nostrademons 19y agoI'm not - I'm using the approach here: http://news.ycombinator.com/item?id=33888 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.
- Jd 19y agoOkay, makes sense. I hadn't read your earlier posting that carefully before, but it sounds better than what I had in mind.
- 19y ago