par de cosas a tener en cuenta también ...
1) Cuando se dice "género como reddit" basada en el rango o fecha, ¿te refieres al nivel superior o al conjunto?
2) Cuando se elimina un nodo, lo que ocurre con las ramas? ¿Los vuelves a criar? En mi aplicación, estoy pensando que los editores decidirán - o bien ocultar el nodo y mostrarlo como "comentario oculto" junto con los niños visibles, ocultar el comentario y de los niños, o bombardear todo el árbol. Re-crianza de los hijos debe ser fácil (acaba de establecer padre de los Chidren a los padres de borrado), pero cualquier cosa que implica a todo el árbol parece ser difícil de implementar en la base de datos.
He estado buscando en el módulo ltree para PostgreSQL. Se debe hacer que las operaciones de base de datos que implican las partes del árbol un poco más rápido. Básicamente le permite configurar un campo en la tabla que se parece a:
ltreetest=# select path from test where path <@ 'Top.Science';
path
------------------------------------
Top.Science
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
Sin embargo, no garantiza ningún tipo de integridad referencial por su cuenta. En otras palabras, se puede tener un registros para "Top.Science.Astronomy" sin tener un registro de "Top.Science" o "superior". Pero lo que sí te deja hacer es cosas como:
-- hide the children of Top.Science
UPDATE test SET hide_me=true WHERE path @> 'Top.Science';
o
-- nuke the cosmology branch
DELETE FROM test WHERE path @> 'Top.Science.Cosmology';
si se combina con el tradicional "comment_id" enfoque/"parent_id" uso de procedimientos almacenados, pienso que usted puede conseguir lo mejor de ambos mundos.Puede atravesar rápidamente el árbol de comentarios en la base de datos utilizando su "ruta" y aún garantizar la integridad referencial a través de "comment_id"/"parent_id". Estoy imaginando algo como:
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
parent_comment_id int REFERENCES comments(comment_id) ON UPDATE CASCADE ON DELETE CASCADE,
thread_id int NOT NULL REFERENCES threads(thread_id) ON UPDATE CASCADE ON DELETE CASCADE,
path ltree NOT NULL,
comment_body text NOT NULL,
hide boolean not null default false
);
La cadena de ruta para una mirada comentario como sea
<thread_id>.<parent_id_#1>.<parent_id_#2>.<parent_id_#3>.<my_comment_id>
lo tanto un comentario raíz del hilo "102" con un comment_id de "1" tendría un camino de:
102.1
Y un niño cuya comment_id es "3" sería:
102.1.3
A algunos niños de la identificación del "3" que tienen de "31" y "54" sería:
102.1.3.31
102.1.3.54
Para ocultar el nodo "3" y sus hijos, que le emite este :
UPDATE comments SET hide=true WHERE path @> '102.1.3';
No obstante, podría agregar una sobrecarga innecesaria. Además, no sé qué tan bien mantenido está.
Por "en memoria" qué se refiere al nivel de aplicación? – Ced