2013-03-12 14 views
5

Vorrei rappresentare milioni di prodotti appartenenti a una o più dozzine di categorie.Design di categoria in Neo4j, relazioni nodo radice e relazioni con nodi indicizzati

sto contemplando alcuni approcci:

  1. indicizzate Categoria Nodi - Crea nodi per ogni categoria e creare un auto_index in CATEGORY_NAME. Quindi creare relazioni "isCategoryOf" tra ciascun nodo del prodotto e i rispettivi nodi di categoria.

  2. Tipi di relazione categoria individuali - Creare rispettive relazioni "isCategoryGames", "isCategoryFood", "isCategoryLifestyle", ecc ... tra i prodotti e il nodo radice.

  3. Memorizzazione di categorie come proprietà di un tipo di relazione - Creare relazioni "isCategory" tra i nodi prduct e il nodo radice e memorizzare i rispettivi tipi di categoria in una proprietà della relazione, ad es. relazione "isCategory" {categoryName: "food"}

Quale di questi approcci è il più efficace e/o scalabile. Esiste un limite o le implicazioni di prestazioni nel fatto che quasi tutti i nodi del database si connettono al nodo radice?

risposta

4

Se si collegano milioni di nodi al nodo radice, il nodo radice diventa un supernodo. This can be problematic.

Il concetto generale dell'opzione 1 mostra una promessa. Se stai modellando il cibo, potresti avere nodi con una proprietà di nome come "Frutta a guscio", "Prodotti caseari", "Dessert", "Prodotti" e una proprietà tipo di "Categoria". Avresti quindi altri nodi con una proprietà di nome come "Cherry Cheesecake" con bordi di "categoria" in uscita ai nodi "Dairy Products" e "Desserts".

Se questa struttura sarà sufficientemente performante dipende dalle vostre domande. Se hai ampie categorie come "cibo", potresti ritrovarti con un supernodo e eseguirai una scansione lineare attraverso i nodi connessi per trovare un nodo con una determinata proprietà. Una scansione lineare su migliaia di cose potrebbe essere abbastanza veloce per i tuoi scopi, ma una scansione su cose da 1M potrebbe non esserlo.

Per scoprirlo, suggerirei di creare un prototipo rapido in cui si generano nodi casuali di prodotti e categorie, quindi collegare ciascun nodo di prodotto a un numero casuale di nodi di categoria. L'indicizzazione dei nodi prodotto e categoria per nome ti aiuterà a trovare singoli prodotti o categorie, ma sono gli attraversamenti che causeranno problemi di prestazioni se raggiungi i supernodi. Sperimenta alcuni degli attraversamenti di Gremlin o delle query di Cypher che ritieni possano essere più problematici. Prova a ridimensionare il numero di nodi da 1K, 10K, 100K e 1M con un numero proporzionato di spigoli. Come cambiano i tempi di attraversamento/interrogazione?

Problemi correlati