Domanda

Voglio inviare i riferimenti unici per il cliente in modo che il cliente possono fare riferimento a oggetti specifici. Le chiavi codificate appengine fornisce sono a volte lunghi 50 byte, e probabilmente solo bisogno di due o tre byte (potevo sperare di necessità quattro o cinque, ma che non sarà per un po '!).

L'invio dei tasti più grandi è in realtà un costo proibitivo, visto che potrebbe spedire 400 referenze alla volta.

Quindi, voglio mappare questi tasti lunghi per le chiavi molto più brevi. Una soluzione ovvia è quella di memorizzare una mappatura nel datastore, ma poi quando sto inviando 400 oggetti che sto facendo 400 ulteriori domande, giusto? Forse ho mitigare la spesa, mantenendo le copie delle mappature in memcache pure. C'è un modo migliore?

Posso solo tirare il numero dai tasti codificati che appengine crea e l'uso che? Ho solo bisogno di qualunque cosa id io uso per essere unico per ogni tipo di entità, non attraverso l'intera applicazione.

Grazie,

Riley

È stato utile?

Soluzione

Tasti

??datastore includono informazioni supplementari non è necessario - come l'ID applicazione. Quindi sicuramente non c'è bisogno di inviare il intero chiavi.

Se questi riferimenti sono ad un particolare tipo nel vostro datastore, allora si può fare ancora meglio e basta inviare la key_name o ID numerico (a seconda di quale utilizzare le chiavi). Se quest'ultimo è il caso, allora si potrebbe trasmettere ogni tasto con pochi byte (si potrebbe optare sia per una lunghezza variabile o di lunghezza fissa intero che codifica a seconda di quale sarebbe più compatto per il vostro caso specifico [probabilmente l'ex fino la maggior parte degli ID che si sta inviando ottenere abbastanza grande]).

Quando si riceve questi tasti parziali indietro da parte dell'utente, dovrebbe essere facile ricostruire la chiave completo che è necessario recuperare le entità del datastore. Se si utilizza il runtime di Python, è possibile utilizzare db.Key.from_path(kind_name, numeric_id_or_key_name) .

Un sistema come questo dovrebbe essere sia semplice e (molto) più veloce che cercare di usare il datastore / memcache per memorizzare una mappatura personalizzata.

Altri suggerimenti

Non hai bisogno di un meccanismo di mappatura personalizzata. nomi chiave di entità uso solo per memorizzare l'identificatore breve:

entity = MyKind(key_name=your_short_id)
entity.put()

Poi si può recuperare queste brevi identitiers in una query:

keys = MyKind.all(keys_only=True).filter(...).fetch(400)
short_ids = [key.name() for key in keys]

Infine, l'uso MyKind.get_by_key_name(short_id) al fine di recuperare le entità da identificatori rimandato dagli utenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top