2011-01-12 13 views
0

Ich baue eine Anwendung mit einer Beziehung von vielen zu vielen; Ein Objekt der Entität "Bild" kann mit einer beliebigen Anzahl von Galerien ("Galerie") verknüpft werden. Und natürlich kann eine Galerie eine beliebige Anzahl von Bildern enthalten.Was in GQL vorzuziehen ist; StringListProperty oder ListProperty?

Also, nach dem Google-Vorschlag hier, werde ich eine Liste bei 'Bild' verwenden, die die Fremdschlüssel von 'Gallery' enthält. Dies ist der BigTable-Ansatz.

(Der alte Stil Relationale DB Ansatz wäre, eine Tabelle/Einheit zu besitzen, zwischen ‚Bild‘ und ‚Galerie‘.)

Hier ist meine Frage: Wenn der Schlüssel zu speichern, soll ich gehen für ein " StringListProperty "auf 'Bild' oder würde eine" ListProperty (db.Key) "besser funktionieren?

Ein Grund sehe ich für eine StringList wäre, dass ich auch andere Werte als Keys speichern könnte, aber auf der anderen Seite wäre das sowieso schmutzig Stil. Aber ich bin mir auch ziemlich sicher, dass Google vorgeschlagen hat, nicht mehr als eine Liste in einer Entität zu verwenden, da der Index explodiert. Das wird mir also eine Hintertür bleiben.

Was die Listproperty mit dem Typ „Key“ ein Punkt wäre die automatische Überprüfung, wenn der Wert tatsächlich ein Schlüssel ist.

Da es sehr einfach ist, Strings in Keys umzuwandeln und umgekehrt, sehe ich keinen Grund für einen der List-Typen, die hier vorzuziehen sind.

Wenn es um Leistungsprobleme geht, habe ich keine Ahnung, wie ich das testen könnte - aber es sieht so aus, als ob dies der Hauptfaktor bei dieser Entscheidung sein wird.

Neugierig auf Ihre Eingabe. Vor allem, wenn jemand die Leistung auf diesem getestet hat oder so nett wäre und es tun würde.

Cheers, // Hannes

Antwort

0

Verwenden Sie ein db.ListProperty(db.Key) wenn Sie beabsichtigen, Listen der Schlüssel zu speichern. Sie werden in einer Binärdarstellung gespeichert, die kompakter ist als die Zeichenfolgendarstellung, die Sie in einer Stringliste verwenden würden.

Sie haben recht, dass das Mischen von Schlüsseln mit anderen Objekten in einer Liste unordentlich ist. Es ist in Ordnung, mehrere Listen in einer Entität zu haben, solange Sie nicht mehr als eine von ihnen in demselben benutzerdefinierten Index indizieren - dies verursacht explodierende Indizes.

+0

Danke, Nick! Werde ich so machen. Prost, // Hannes – Hannes

0

Verwenden Sie db.ListProperty (db.Key), dies wird den Datenzugriff einfacher als string machen. Wenn das Gallery-Modell eine Eigenschaft hat, hat pic_list den Typ db.ListProperty (db.Key), der die Liste enthält von Schlüsseln der Bildeinheit. Angenommen, Bild ist der Name Ihrer Entität .. dann Picture.get (// GalleryObject // .pic_list) wird alle Bildeigenschaften erhalten.

+0

Vielen Dank für den wertvollen Beitrag Abdul. – Hannes