Det beror på. Om du förväntar dig att ha många användare, en mycket hög transaktionsvolym eller ett vansinnigt antal attributhämtningar per fråga, skulle jag säga använd HSTORE. Om din app däremot börjar smått och växer över tiden, eller har relativt få transaktioner som hämtar attribut, eller bara hämtar några per fråga, använd JSON. Även i det senare fallet, om du inte hämtar många attribut men kontrollerar en eller två nycklar ofta i WHERE
klausul i dina frågor, kan du skapa ett funktionellt index för att påskynda saker och ting:
CREATE INDEX idx_foo_somekey ON foo((bar ->> 'somekey'));
Nu, när du har WHERE bar ->> somekey
, bör den använda indexet.
Och naturligtvis blir det lättare att använda kapslade data och att uppgradera till jsonb när den blir tillgänglig för dig.
Så jag skulle luta mig mot JSON om du inte vet säkert att du kommer att sparka din server i röv med kraftig användning av nyckelhämtningar innan du har en chans att uppgradera till 9.4. Men för att vara säker på det, skulle jag säga, gör några benchmarking med förväntade frågevolymer nu och se vad som fungerar bäst för dig.