3.4.3.1. Loại và định danh:
Mỗi thực thể của Datastore thuộc về một loại riêng biệt dùng để phân biệt các thực thể dựa theo mục đích của truy vấn. Trong Java Datastore API, loại của thực thể phải được chỉ định khi nó được tạo ra.
Ngoài việc mỗi thực thể phải thuộc về một loại nào đó, nó còn phải có một định danh, được chỉ định khi thực thể đó được tạo ra. Vì nó là một phần khóa của thực thể, định danh sẽ gắn liền với thực thể vĩnh viễn không thay đổi được. Định danh có thể được chỉ định bằng một trong 2 cách:
- Trình ứng dụng có thể tự chỉ định tên khóa làm định danh.
- Datastore có thể tự động chỉ định định danh cho các thực thể bằng một số ID
3.4.3.2. Giao tác và nhóm các thực thể
Mọi nỗ lực để tạo, cập nhật hoặc xóa các thực thể được diễn ra trong ngữ cảnh của một giao tác. Một giao tác có thể gồm nhiều các thao tác như vậy. Để duy trì tính nhất quán của dữ liệu, một giao tác phải đảm bảo rằng tất cả các thao tác như vậy trong Datastore tạo nên một đơn vị, điều đó có nghĩa là, chỉ cần một thao tác có lỗi, thì không thao tác nào trong giao tác đó được thực hiện.
Một giao tác đơn có thể được thực hiện trên nhiều thực thể, miễn là các thực thể đó được phát triển từ một ancestor. Những thực thể như vậy được gọi là thuộc về một nhóm thực thể. Mỗi khi thiết kế mô hình dữ liệu, cần phải xác định rõ các thực thể nào cùng được thực hiện trong một giao tác. Sau đó, khi tạo các thực thể, đặt chúng vào cùng một nhóm thực thể và báo cho ancestor chung biết. Việc thông báo đó sẽ giúp App Engine biết các thực thể sẽ được cập nhật cùng nhau, do vậy sẽ có cách lưu trữ nhóm các thực thể này một cách thích hợp.
3.4.3.3. Thuộc tính và kiểu dữ liệu
Các giá trị của dữ liệu liên quan đến thực thể sẽ bao gồm một hoặc nhiều thuộc tính. Mỗi thuộc tính sẽ có tên và một hoặc nhiều giá trị. Mỗi thuộc tính có thể có nhiều
hơn một giá trị, và hai thực thể có thể có các kiểu giá trị khác nhau cho cùng một thuộc tính.
Bảng 3.3 sẽ liệt kê các kiểu dữ liệu thường dùng cho các thuộc tính trong java:
Value type Java type(s) Sort order
Integer short int long java.lang.Short java.lang.Integer java.lang.Long Numeric Floating-point number float double java.lang.Float java.lang.Double Numeric Boolean boolean java.lang.Boolean false < true
Text string (short) java.lang.String Unicode
Text string (long) com.google.appengine.api.datastore.Text None Byte string (short) com.google.appengine.api.datastore.ShortBlob Byte order Byte string (long) com.google.appengine.api.datastore.Blob None
Date and time java.util.Date Chronologic
al
Geographical point com.google.appengine.api.datastore.GeoPt By latitude, then
longitude Postal address com.google.appengine.api.datastore.PostalAdd
ress
Unicode
Telephone number com.google.appengine.api.datastore.PhoneNu mber
Unicode
Email address com.google.appengine.api.datastore.Email Unicode Google Accounts com.google.appengine.api.users.User Email
user address in Unicode order Instant messaging handle com.google.appengine.api.datastore.IMHandle Unicode
Link com.google.appengine.api.datastore.Link Unicode Category com.google.appengine.api.datastore.Category Unicode Rating com.google.appengine.api.datastore.Rating Numeric Datastore key com.google.appengine.api.datastore.Key
or the referenced object (as a child)
By path
elements
(kind, identifier, kind, identifier, ...)
Blobstore key com.google.appengine.api.blobstore.BlobKey Byte order Embedded entity com.google.appengine.api.datastore.Embedded
Entity
None
Null null None
Bảng 3. 3. Các kiểu dữ liệu của Datastore được hỗ trợ trong Java