[JS / Postgres] hoe 2 gegevens verbinden met elkaar?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • argon007
  • Registratie: April 2011
  • Laatst online: 11:15
Hallo,

Ik heb hier een dag zitten op zoeken en sta nergens... Vandaar dat ik hier even kom aankloppen of te zien of iemand mij op weg kan helpen/kan meehelpen denken. Ik ben geen Dev dus misschien zoek ik het veel te ver/kan het veel makkelijker. Alle suggesties zijn welkom ! :-)

Ik heb een algoritme draaien die Bitcoin trade. Nu wil ik dit algoritme ook laten gebruiken door een vriend van mij. Ik heb zijn API keys gekregen en kan dus traden op zijn account. Via Websocket data kopieer ik elke acties over naar zijn account. De logica/het script hiervoor heb ik volledig gemaakt en het doet exact wat het moet doen. Echter sla ik alle gegevens (timestamp, coin naam, quantity, ...) momenteel op in een var = db [] . Als het script om één of andere reden crasht ben ik natuurlijk alles kwijt en lopen we het gevaar dat er vreemde dingen gebeuren...

Ik wil de data dus opslaan in een Postgres database. Postgres en Pgadmin zijn geïnstalleerd op mijn Linux VPS en de database + table werden ook aangemaakt. De communicatie tussen Node en Postgres doe ik via de pg module (https://node-postgres.com/).

Ik heb door copy/paste (opzoek)werk op Google commando's gevonden die ik kan uitvoeren via PgAdmin die lijken te werken. Ik krijg ze echter niet werkende in Node/PG

Wanneer het Master account een munt aankoopt voer ik volgende actie uit (als simulatie in PgAdmin Query Tool):

Postgres add new entry:
JavaScript:
1
INSERT INTO db (timestamp, coin, pause, orderid, qtyavailable, side) VALUES ('2021-09-28 22:45:00+02', 'ADAUSDT', false, null, 100, 'LONG')


Als het order effectief uitgevoerd werd op de Master account moet ik het OrderId toevoegen aan de kolom orderid:

Add Master orderId record ('ADAUSDT' is een variabele alsook '123456'):
JavaScript:
1
UPDATE db SET orderid = orderid || '{"slave": "", "master": "123456"}' ::jsonb WHERE coin= 'ADAUSDT';


Bij de volgende stap loop ik vast... Het Slave account voert het order uit en dit orderId moet toegevoegd worden in het object waar we reeds het master orderid hebben in opgeslagen. Het resultaat zou dus moeten zijn [code=js{"slave": "56789", "master": "12345"}. Er kunnen ook meerdere orders uitgevoerd worden. In Node met mijn var db = [] werkte ik met een Array Of Objects en dit probeer ik ook zo te doen in Postgres. Het resultaat in Node was dus
JavaScript:
1
orderid [{"slave": "56789", "master": "12345"}, {"slave": "98765", "master": "54321"}]
.

Dit is dus hoe mijn huidige structuur er uitziet:
Afbeeldingslocatie: https://cdn.discordapp.com/attachments/654236086838755340/892462622841118750/unknown.png

Dus kort samengevat zoek ik een manier om het Slave orderid toe te voegen aan het master orderid, het slave orderid te kunnen opzoeken adhv het master orderid, ... en dit via de pg module in Node.

Het hoeft dus zeker geen "Array of Objects" te zijn in Postgres. Als je een andere/makkelijkere manier weet waarmee ik de connectie kan maken tussen het Slave <-> Master orderId dan ben ik hier ook gelukkig mee ! :-)

Alvast bedankt voor de reacties!

Alle reacties


Acties:
  • 0 Henk 'm!

  • !GN!T!ON
  • Registratie: September 2006
  • Laatst online: 26-09 20:18
Volgens mij zou je in SQL een tweede tabel moeten maken (misschien even zoeken op normalisatie), of denken aan een niet relationele database te gebruiken zoals MongoDB.

Edit:

Ik denk dat een tweede table niet nodig is, maar dat je een self referential join wilt doen op die table:

https://www.w3resource.com/sql/joins/perform-a-self-join.php

[ Voor 35% gewijzigd door !GN!T!ON op 28-09-2021 19:38 ]


Acties:
  • 0 Henk 'm!

  • itons
  • Registratie: Oktober 2003
  • Niet online
Afbeeldingslocatie: https://tweakers.net/i/SOmvvcdmNnT1x1yDR4IoEUqH_-4=/800x/filters:strip_exif()/f/image/bObOqZXlaz1Dcn6Qj8jiQV7F.png?f=fotoalbum_large

Realiseer me dat dit niet het antwoord is op je vraag :+ Maar zou je het domein niet anders modelleren? Alles bij elkaar prakken maakt het wat onoverzichtelijk. Door een opdracht en een executie los te koppelen bv. Je probeert nu in een array pairs bij te houden van de master en slave account. Wat als er nog een vriend mee wilt doen? Wat als er 2 orders op de master account uitgevoerd moeten worden en maar 1 op de 2e account omdat het order boek er anders uit zag op het moment van executie? etc etc. Dat kan je veel beter kwijt als je het los trekt.

Beschouw een account als een account, verschil master slave is er eigenlijk niet? Je algoritme bepaald op basis van marktcondities dat een trade zinvol is en stuurt die trade vervolgens naar 1 of meer accounts?

Sowieso dat in de huidige tijd geest veel mensen liever andere woorden gebruiken daarvoor: https://www.theserverside...ves-you-can-use-right-now