Een regel aanpassen maar geen ID met noSQL Database Hbase

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • defixje
  • Registratie: Oktober 2003
  • Laatst online: 15-07 09:44
Dag allemaal,

Ik ben sinds kort begonnen met noSQL database HBase, ik probeer hier spelenderwijs beetje in thuis te raken.

Nu heb ik alles draaien en kan ik via PHP icm Thrift praten met HBase Server. Dus dat gaat allemaal goed.

Wat ik alleen niet begrijp van dit soort databases is hoe ga je te werk met bijvoorbeeld de ID's ? (Rows in dit geval)

Voorbeeldje van mijn test database:
Tabel aangemaakt met:
create 'storedata', 'privatekey', 'publicaddress', 'balance', 'state'

1ste regel die ik heb toegevoegd (bogus data):
put 'storedata', 'username1', 'privatekey', '617d317550f7ef25d1cf81aa4af5b'
put 'storedata', 'username1', 'publicaddress:compressed', '1843ih43hipubaddr'
put 'storedata', 'username1', 'publicaddress:uncompressed', '1843ih43hipubaddruncompressed'
put 'storedata', 'username1', 'balance:compressedaddress', '112'
put 'storedata', 'username1', 'balance:uncompressedaddress', '10'
put 'storedata', 'username1', 'state', '1'
Nu is dus mijn row "username1", nou bestaan er geen auto increments in een noSQL database (ja is er wel soort van in te bouwen maar is niet de manier zoals het hoort heb ik begrepen)

Hoe ga je specifieke data opvragen/bewerken uit je database als je geen ID heb maar bijvoorbeeld wel exact de zelfde waarde in de columns? Je heb geen row-ID die je kan opgeven.

Om mijn vraag iets duidelijker te maken, hoe vertaal je onderstaande SQL-querys naar een noSQL type als er niet echt een ID bestaat. Of moet ik mijn ROW benaming anders opbouwen, zoja, op welke manier denk jij?
SELECT * FROM 'storedata' WHERE `id` = '1'
of
UPDATE `storedata` SET `state` = '2' WHERE `id` = '1'
Hopelijk ben ik beetje duidelijk, weet niet echt hoe ik het moet verwoorden. :D

Ter verduidelijking, ik hoef geen hele uitleg over de shell van HBase, wil alleen weten hoe je met noSQL 1 specifieke regel kan aanroepen/wijzigen zonder dat je een referentie als een ID heb. En hoe ik het beste te werk kan gaan om het makkelijker te maken om toch bij deze data te komen (bijvoorbeeld door andere opbouw van mijn database)

Ook weet ik dat er Hive bestaat, maar dat heb ik nog niet draaiend. Maar sowieso moet je ook zonder Hive dit soort dingen kunnen doen lijkt mij.

Ter info: bij mij draait nu:
Hadoop 2
Zookeeper
HBase
Thrift (met Thrift generated PHP classes)

D3Fix, Ethical Hacker, Pokeraar, Programmeur


Acties:
  • 0 Henk 'm!

  • defixje
  • Registratie: Oktober 2003
  • Laatst online: 15-07 09:44
Is mijn vraag te lastig?

D3Fix, Ethical Hacker, Pokeraar, Programmeur


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 20:46
Omdat je na 4 1/2 uur geen antwoord krijgt?

  • defixje
  • Registratie: Oktober 2003
  • Laatst online: 15-07 09:44
Heb het gevonden, wel jammer dat er geen enkele Tweaker hier serieus op wilt antwoorden.

Had gehoopt op een leuk NoSQL topic, waar wat ideeën uitgewisseld kon worden over de werking en verschillende methodes van opbouw van database en misschien wat technieken van querying op deze databases enz.

[ Voor 10% gewijzigd door defixje op 18-12-2014 12:23 ]

D3Fix, Ethical Hacker, Pokeraar, Programmeur


  • dominiek86
  • Registratie: November 2013
  • Laatst online: 10-09 20:53
Wel je gebruikt best UUIDs ipv. autoincrements. Zo hoeft er niet gesyncroniseerd te worden tussen verschillende clients of HBase regionservers. Een alternatief is natuurlijk zelf een string samenstellen als primary key, bv. als je weet dat username uniek is, gebruik gewoon die als key voor je hbase tabel.

De key bepaalt de manier waarop je je data benadert, als je via een andere manier wilt opzoeken (bv. datum?) dan zal je een tweede tabel moeten maken die datums (jaar/maand/dag) linked naar de usernames (of UUIDs).

Wat ook handig kan zijn is het concept van 'Scans' in HBase. Het is bv. heel snel om een bepaalde range van (opeenvolgende) keys rechtstreeks op te halen, zonder roundtrips voor elke row. Om zo'n scan te definieren (basis geval), moet je een start en end-key hebben. Wil je bv. alle username die met een G beginnen, dan zet je als start key G en als end-key H.

Hoop dat dit een beetje duidelijk is?