2014-06-09 4 views
1

Je viens juste d'apprendre IndexedDB, donc le concept de Google Cloud Datastore me trouble.Google Cloud Datastore: Stockage des tableaux et des objets

Comment exactement stockez-vous les tableaux et les objets?

Tenir compte de ce scénario:

{ category: 'football', keywords: ['foo', 'bar'] } 
{ dinosaurs: { trex: { teeth: 'large' } } } 

Comment structurer exactement dois-je la base de données?

Dans IndexedDB, vous avez multiEntry qui permet de stocker tous les mots-clés dans un tableau en tant qu'entrées distinctes.

Pour le tableau: Si je veux effectuer une recherche par mot-clé, devrais-je créer une nouvelle entité avec des mots-clés «aimables» et stocker chaque mot-clé comme une entité distincte? Comment pourrais-je le lier à sa catégorie pertinente?

Pour l'objet: Dois-je le stocker en tant que chaîne JSON, puis l'enchaîner/décoder dans le script?

+1

stocker comme une chaîne JSON, puis stringify/décodage dans le script est un moyen simple et peu coûteux de le faire. – GAEfan

Répondre

2

Vous pouvez enregistrer une liste de chaînes dans une seule propriété. Cette propriété peut être indexée ou non indexée.

Pour un objet, vous créez une entité:

Entity entity = new Entity("dinosaurs"); 
entity.setProperty("type", "trex"); 
entity.setUnindexedProperty("teeth", "large"); 

De cette façon, vous pouvez indiquer les propriétés que vous souhaitez indexer (à un coût supplémentaire) et les propriétés que vous souhaitez non indexées.

L'exemple ci-dessus utilise Java Datastore API, mais vous pouvez également utiliser un framework tel que Objectify pour gérer vos objets et entités.

Il existe une documentation raisonnablement bonne sur Datastore, et de nombreux examples/tutorials disponibles.

+0

Comment est-ce que je demanderais un mot-clé spécifique si la liste est stockée en tant que chaîne? Par exemple, je veux toutes les entrées qui contiennent le mot-clé "foo". –

+1

Si vous le stockez en tant que chaîne, faites un 'JSON.loads', vous pouvez faire une boucle sur chacun d'entre eux. 'some_var = json.loads (mon_JSON_str.json)' 'this_val = some_var ['keywords']. get ('foo')' 'si this_val ...'. Mais, c'est plus cher et inefficace. Si vous souhaitez interroger le magasin de données pour les éléments qui contiennent 'foo', vous souhaiterez indexer cette requête et les propriétés stockées en tant que propriétés dans le magasin de données. – GAEfan

+0

La dernière phrase, est-ce que cela signifie quelque chose comme 'keywords: {foo: 'football'}'? –

1

Dans l'API HTTP, une valeur peut contenir une liste de valeurs:

{properties: {keywords: {list_value: [{string_value: 'foo'}, ...]}}} 

ou une entité:

{ 
    properties: { 
    dinosaurs: { 
     entity_value: { 
     properties: { 
      'trex': {entity_value: {properties: {teeth: {string_value: 'large'}}} 
     } 
     } 
    } 
    } 
} 

(notez que entity_value est actuellement ne peut pas être indexé)

Questions connexes