[Neo4j] Best practices discussie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 00:48
Ik ben onlangs begonnen met Neo4j en zou graag een paar best practices en tips ontvangen.

Vraag 1:
Indien een node wordt verwijderd dan wordt het id van de betreffende node vrijgegeven. Bij het aanmaken van een nieuwe node, kan het voorkomen dat deze dezelfde id krijgt als de verwijderde node.

Dit maakt het id naar mijn inziens compleet nutteloos voor de buitenwereld tenzij je nooit nodes verwijderd. Bovendien had ik een uuid verwacht in plaats van een integer incrementele getal.

Wat zijn de best practices omtrent een id van een node? Zelf een maken? Of de interne id gebruiken die Neo4j aanmaakt?


Vraag 2:
Ik vraag me af of het nog nodig is om data op te slaan in zowel een relationele database en tegelijkertijd in Neo4j. Waar bij bijvoorbeeld in Elasticsearch het niet de bedoeling is om de relationele database te vervangen, ben ik hier niet zeker van met Neo4j.

Stel er zijn een aantal tabellen in een relationele database:
code:
1
2
3
4
5
6
7
--------------------------------------------
|  users     |  games        |  platforms  |
--------------------------------------------
|  id        |  id           |  id         |
|  username  |  title        |  title      |
|  password  |  platform_id  |             |
--------------------------------------------

Neo4j zal gebruikt worden om game suggesties te tonen.

Dan zijn er een aantal opties:
  1. De tabellen laten staan in de relationele database en games en platforms nodes aanmaken in Neo4j en deze data in sync houden en deze data in sync houden met de relationele database;
  2. De tabellen laten staan in de relationele database en games en platforms nodes aanmaken met enkel het id van de platform en game in Neo4j en deze data in sync houden met de relationele database;
  3. Enkel de tabel users laten staan en de games en platforms verplaatsen naar nodes in Neo4j.
Wat zijn hier de best practices in? :)

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Vraag 1: https://neo4j.com/labs/apoc/4.1/graph-updates/uuid/ als je UUIDs wil gebruiken.
Vraag 2: Neo4J schaalt over het algemeen niet zo goed als relationele databases. Het is een ACID compliant database dus je kan het verder wel proberen. Het is afhankelijk van je architectuur; als je de uitzondering bent op de regel; lekker voor gaan :)

https://niels.nu


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 00:48
Ik had inderdaad gezien dat via apoc uuid's gebruikt kan worden.
Hydra schreef op zondag 12 december 2021 @ 13:17:
Vraag 2: Neo4J schaalt over het algemeen niet zo goed als relationele databases. Het is een ACID compliant database dus je kan het verder wel proberen.
Zou je kunnen uitleggen wat je bedoelt met dat Neo4J niet goed schaalt ten opzichte van een relationele database? :)

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
ZeroXT schreef op maandag 13 december 2021 @ 12:43:
Zou je kunnen uitleggen wat je bedoelt met dat Neo4J niet goed schaalt ten opzichte van een relationele database? :)
Neo4J heeft relatief simpele indexing mechanismes en is voor z'n performance afhankelijk van het in-memory kunnen houden van veel/de meeste data. Dat is tenminste mijn ervaring. Let wel; de laatste keer dat ik echt in prod te maken gehad heb met Neo4J is 8 jaar geleden ofzo, ongetwijfeld zijn er veel dingen verbeterd. Maar hou er wel rekening mee en test het vooral. En ga ook niet alleen uit van info van de DB vendor; veel van het spul dat ze online zetten is marketing.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • CloudDev
  • Registratie: December 2021
  • Laatst online: 10-02-2022
Hydra schreef op zondag 12 december 2021 @ 13:17:
Vraag 2: Neo4J schaalt over het algemeen niet zo goed als relationele databases. Het is een ACID compliant database dus je kan het verder wel proberen. Het is afhankelijk van je architectuur; als je de uitzondering bent op de regel; lekker voor gaan :)
Horizontaal of verticaal?

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik vermoed dat ie gewoon bedoelt hoe de performance schaalt tgv toenemende data. Oftewel big-O.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 00:48
armageddon_2k1 schreef op zondag 2 januari 2022 @ 21:36:
[...]


Ik vermoed dat ie gewoon bedoelt hoe de performance schaalt tgv toenemende data. Oftewel big-O.
Ik meende dat Neo4j juist goed schaalt bij toenemende data. Relationele databases staan er juist om bekend om niet goed te schalen indien je joins wil gebruiken. Ik las de vraag ook als horizontaal en verticaal. Sharding lijkt bij Neo4j erg moeilijk te zijn dus ik geloof dat hier horizontaal schalen bedoeld wordt.

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
@ZeroXT Goed punt, volgens mij heb je inderdaad gelijk

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • CloudDev
  • Registratie: December 2021
  • Laatst online: 10-02-2022
ZeroXT schreef op zondag 2 januari 2022 @ 23:21:
[...]


Ik meende dat Neo4j juist goed schaalt bij toenemende data. Relationele databases staan er juist om bekend om niet goed te schalen indien je joins wil gebruiken. Ik las de vraag ook als horizontaal en verticaal. Sharding lijkt bij Neo4j erg moeilijk te zijn dus ik geloof dat hier horizontaal schalen bedoeld wordt.
Van wat ik met mijn beperkte Neo4J kennis weet, is dat horizontal sharding niet een van de dingen is waar Neo4J in uitblinkt. De architectuur is met name gericht op read scaling. Overigens is het de vraag of je het überhaupt ooit tegen de limitaties aan gaat lopen.

Lees anders dit eens op stackoverflow.
Pagina: 1