Thanks guys for clearing up my confusion. Thanks Ikai for pointing me to the documentation as well. I will read up on the documentation and if I have any more questions will bug you guys again :).
Manny On Sat, Jan 30, 2010 at 12:16 AM, Ikai L (Google) <[email protected]> wrote: > Hi Manny, > > A few things to first remember - App Engine's datastore is not a database, > but a distributed key value store with additional features. Thus, we should > be careful not to frame our thinking in terms of RDBMS schemas. For this > reason, I like to avoid using database terminology that can confound the > design process like "table" or "column". App Engine stores objects > serialized ("entities") and indexes on the values. It'd be similar to an > approach of creating a MySQL table with a String ID and a blob value, > storing serialized Objects in the blob column, or using Memcache and storing > JSON values. > > When you retrieve a single value from the key value store, we have to > retrieve everything at once. In most scenarios, unlike SQL databases you may > be used to, retrieving large binary or text data does not add serious > overhead. Of course, this changes if you start storing data on the scale of > 1mb and are retrieving it unnecessarily. How large is the data you are > retrieving? > > Here's the way I would model your scenario if I was positive the > text/binary field had a 1:1 relationship with the parent class: > > * on your main entity, define the properties. > * define a new entity with a text/binary field, and encode the parent key > information in this key such that generating the key for this child field is > very cheap. KeyFactory.stringToKey and KeyFactory.keyToString are crucial > here. Read more about them here: > http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/KeyFactory.html. > You can call your child property "parent_id:additional_info" or whatever > makes sense to you. > > Robert's solution of using a child key is basically just a variation on > this, as parent key information is encoded in a child key. > > A lot of this stuff can be a bit different to get used to. I suggest > becoming familiar with keys and how they are used in App Engine: > > Basic documentation about relationships: > http://code.google.com/appengine/docs/java/datastore/relationships.html > A more advanced article: > http://code.google.com/appengine/articles/storage_breakdown.html > > On Thu, Jan 28, 2010 at 10:28 PM, Manny S <[email protected]> wrote: > >> Hi All, >> >> First off, thanks for your time. A quick noob question on the right way to >> model data. >> >> I have a table with four columns A,B,C, D. D - the fourth is of type text >> (contains quite a bit of data). >> >> I wanted to ensure that the contents of the details column 'D' is not >> fetched during a query. A sample scenario >> User does a search. Sees Columns A,B,C. If they need more details for that >> particular record Click on a link that fetches D for that particular >> record. >> >> So I tried to do something like - Select A, B, C from tablename. >> >> I found from the documentation that the GQL query returns full data >> objects and so all queries start with SELECT *. Is this true for JDOQL on >> the datastore as well? Does this mean everytime I query the data store its >> going to return all columns consuming bandwidth? >> >> Also since I want the content of COlumn D to be fetched on subsequent user >> action so should I instead create two tables one with >> >> ID_TB1, A, B, C >> >> and the other one with >> >> ID, ID_TB1, D? >> >> Manny >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<google-appengine%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/google-appengine?hl=en. >> > > > > -- > Ikai Lan > Developer Programs Engineer, Google App Engine > http://googleappengine.blogspot.com | http://twitter.com/app_engine > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-appengine%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
