Ki n trúc Google App Engine .... T ng quan Google App Engine .... Google Accounts ..... Google Accounts App Engine có kh n ng tích h p các tài kho n Google vào ng d ng, các Google Docs
Trang 1TR NG I H C M TP.H CHÍ MINH
KHOA CÔNG NGH THÔNG TIN
xyxy
I N TOÁN ÁM MÂY V I GOOGLE APP ENGINE
BÁO CÁO KHÓA LU N T T NGHI P
Trang 2L I CÁM N
th y Em xin chân thành c m n các th y đã b th i gian quý báu c a mình đ giúp em hoàn thành t t khóa lu n này
Trang 3NH N XÉT C A GIÁO VIÊN H NG D N
NH N XÉT C A GIÁO VIÊN H NG D N ………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 4M C L C
Ch ng 1 T NG QUAN 1
1.1 Gi i thi u 1
1.2 M c đích làm đ tài 1
1.3 Ph ng pháp nghiên c u 2
1.4 Ph m vi 2
1.5 B c c báo cáo 2
Ch ng 2 C S LÝ THUY T 4
2.1 T ng Quan i n Toán ám Mây 4
2.1.1 Gi i pháp c a đi n toán đám mây 5
2.1.2 C u trúc các ph n t o nên đám mây 6
2.1.2.1 Các d ch v ng d ng (SaaS) 6
2.1.2.2 Các d ch v n n t ng (PaaS) 6
2.1.2.3 Các d ch v c s h t ng (IaaS) 6
2.1.3 i n toán đám mây v i Google App Engine 7
2.2 Ki n trúc Google App Engine 7
2.2.1 T ng quan Google App Engine 7
2.2.2 Môi tr ng phát tri n 8
2.2.3 Các lo i t p tin t nh trên server 9
2.2.4 DataStore 9
2.2.5 Các lo i D ch V 10
2.2.6 Google Accounts 10
2.2.7 Các h n ch c a Google App Engine 10
2.3 Các thành ph n c a Google App Engine trong Java 11
2.3.1 BackEnds 11
2.3.2 Datastore 11
2.3.2.1 Th c Th , Thu c Tính và khóa 12
2.3.2.2 Transactions 15
Trang 52.3.2.3 Java Data Object (JDO) 17
2.3.2.4. Java Persistence API (JPA) 20
2.3.3 Các d ch v c a GAE 23
2.3.3.1 BlobStore Java API 23
2.3.3.2 Capabilities 24
2.3.3.3 Channel API 25
2.3.3.4 Image API 26
2.3.3.5 Mail API 26
2.3.3.6 Memcache Service 27
2.3.3.7 OAuth 27
2.3.3.8 Task Queues 29
2.3.3.9 URL Fetch 29
2.3.3.10 Users Service 29
2.3.3.11 XMPP 30
2.3.3.12 YAML 30
Ch ng 3 HI N TH C NG D NG 33
3.1 S l c ng d ng 33
3.1.1 Mô hình ho t đ ng 33
3.1.2 S l c các ch c n ng 33
3.2 Xây d ng ng d ng Frontend và Backend 33
3.2.1 ng b hóa d li u tài kho n google 33
3.2.2 S d ng App Engine Datastores 34
3.2.2.1 Tùy ch nh l u tr d li u 34
3.2.2.2 Xác đ nh m i k t h p và b ng s 34
3.2.2.3 Mô hình th c th m i k t h p 39
3.2.2.4 Mô hình v t lý d li u 40
3.2.3 S đ trang web (Site map) 40
3.2.4 Apache Struts Framework 41
Trang 63.2.5 Thanh toán tr c tuy n (Online Payment) 42
3.2.5.1 T ng quan v tính n ng thanh toán 42
3.2.5.2 C ng thanh toán Nganluong.vn 43
3.2.6 Các yêu c u v tính toán 44
3.2.7 D ch v Mail 46
3.3 Xây d ng ng d ng xem đi m trên Mobile 46
3.3.1 Mô hình ho t đ ng 47
3.3.2 Cách th c x lý 47
Ch ng 4 K T QU T C 49
4.1 Các d ch v ti n ích dành cho giáo viên, ph huynh và h c sinh 49
4.2 Ti n ích dành cho ng i qu n tr 53
4.3 ng d ng trên Mobile 55
Ch ng 5 K T LU N 56
5.1 L i ích c a đi n toán đám mây v i GAE 56
5.2 H n ch 56
TÀI LI U THAM KH O 57
Trang 7DANH M C CÁC THU T NG TI NG ANH VÀ CH VI T
T T
OPENID: Th vi n giúp đ ng nh p vào m t website
GAE: Google App Engine
HDR: High Replication Datastore
API: M t t p các th vi n
SDK: B công c dành cho phát tri n ph n m m
JDO: Java Data Object
JPA: Java Persistence API
JPQL: M t lo i ngôn ng dùng đ truy v n d li u trong JPA
YAML: M t ngôn ng giúp c u hình ng d ng Java
XMPP: M t giao th c c a Google App Engine trong ng d ng Chat G talk
DDos: m t lo i t n công t ch i d ch v
GFS: Google File System, h th ng file c a Google
Trang 8DANH M C CÁC HÌNH
Hình 2.1 Mô hình các c m máy ch trên đám mây 4
Hình 2.2 Các gi i pháp v cung c p các d ch v tài nguyên 5
Hình 2.3 Các ph n t o nên đám mây 6
Hình 2.4 Ki n trúc Google App Engine cho Java 8
Hình 2.5 So sánh gi a hai lo i l u tr d li u 12
Hình 2.6 Các ki u d li u đ c h tr b i GAE 15
Hình 2.7 Mô hình c p nh t c a d li u c a Transaction 16
Hình 2.8 Mô hình JDO 17
Hình 2.9 C u hình JDO trong Google App Engine 18
Hình 2.10 Mô Hình JPA 21
Hình 2.11 Mô Hình JPA trong Google App Engine 22
Hình 2.12 T o đ i t ng EntityManager 22
Hình 2.13 Cách th c l u d li u c a BlobStore trong Datastore 23
Hình 2.14 Cách s d ng Capabilities 24
Hình 2.15 Các lo i Capabilities GAE h tr 25
Hình 2.16 Trao đ i d li u gi a client và server s d ng Channel API 26
Hình 2.17 C u hình Channel trong Google App Engine 26
Hình 2.18 C u hình Mail trong Google App Engine 27
Hình 2.18 Ch ng th c s d ng OAuth 28
Hình 2.20 Ch n ph ng th c ch ng th c trong GAE 30
Hình 3.1 Quy trình đ ng b hóa website v i google Accouts 34
Hình 3.2 M i k t h p x p l p h c sinh 35
Hình 3.3 M i k t h p x p l p giáo viên 35
Hình 3.4 M i k t h p x p lo i h c sinh 36
Trang 9Hình 3.5 M i k t h p ki m tra 37
Hình 3.6 M i k t h p giáo viên ch nhi m và phân ban l p h c 38
Hình 3.7 Mô hình th c th m i k t h p 39
Hình 3.8 Mô hình v t lý d li u 40
Hình 3.9 S đ c a website 40
Hình 3.10 Quy trình ho t đ ng c a Struts Framework 41
Hình 3.11 Ch ng th c tài kho n trong thanh toán 42
Hình 3.12 Chuy n kho n trong thanh toán 43
Hình 3.13 Thanh toán ki u tích h p đ n gi n 44
Hình 3.14 Mô hình ho t đ ng ng d ng mobile 47
Hình 3.15 L u đ x lý yêu c u c a ng d ng Mobile 48
Hình 4.1 Thông tin c a h c sinh 49
Hình 4.2 Thông tin c a giáo viên 50
Hình 4.3 Thông tin v đi m s 51
Hình 4.4 Thông tin v h c phí 51
Hình 4.5 Chuy n kho n qua nganluong.vn 52
Hình 4.6 G i thông tin cho h c sinh 53
Hình 4.7 Các ti n ích dành cho ng i qu n tr 54
Hình 4.8 màn hình ng i dùng nh p vào mã s sinh viên 55
Hình 4.9 ng i dùng sau khi tra c u đi m thành công 55
Trang 10Ch ng 1 T NG QUAN
1.1 Gi i thi u
Thu t ng "cloud computing" ra đ i gi a n m 2007 không ph i đ nói v m t
đang di n ra t m y n m qua khái ni m này có th đ c di n gi i m t cách đ n gi n:
(đám mây) trên Internet thay vì trong máy tính gia đình và v n phòng (trên m t đ t) đ
m i b i nhi u doanh nghi p hi n không có máy ch riêng, PC ch cài m t s ph n
hosting cho website công ty, thuê công c qu n lý doanh thu t Salesforce.com, l y d
tìm ki m, phân tích, chia s và l u tr tài li u
V i các d ch v s n có trên Internet, doanh nghi p không ph i mua và duy trì hàng tr m, th m chí hàng nghìn máy tính c ng nh ph n m m H ch c n t p trung
s n xu t b i đã có ng i khác lo c s h t ng và công ngh thay h
Google n m trong s nh ng hãng ng h đi n toán máy ch o tích c c nh t b i
ho t đ ng kinh doanh c a h d a trên vi c phân ph i các cloud (virtual server), và các web services s d ng các d ch v hosting c a Google, đ c g i là Google App Engine (GAE)
GAE là m t n n t ng hosting bao g m web server, c s d li u BigTable và kho
l u tr file GFS GAE cho phép vi t ng d ng web d a trên c s h t ng c a Google Ngh a là chúng ta không c n quan tâm là trang web c a chúng ta đ c l u tr
nh th nào (k c database đi kèm), mà ch c n quan tâm đ n vi c phát tri n ng
d ng theo các API do Google cung c p
Vì th khi s d ng GAE chúng ta nh m đ n các l i ích mà nó mang l i nh gi m
tâm t i gi i h n ph n c ng c ng nh v trí đ a lý D li u trong mô hình đi n toán đám mây đ c l u tr 1 cách phân tán t i nhi u c m máy ch t i nhi u v trí khác
th m h a x y ra Vi c t p trung d li u t nhi u ngu n khác nhau s giúp các chuyên
r i ro b n c p toàn b d li u Và các l p trình viên c ng d dàng h n trong vi c cài
đ t, nâng c p ng d ng c a mình D a vào nh ng tiêu chí này, chúng ta có th t o ra
m t ng d ng có th phát tri n thành ng d ng l n và nó không là m t ý ngh xa v i
d a trên nh ng l i ích mà nó mang l i
1.2 M c đích làm đ tài
Trang 11D a trên công ngh GAE mà cung c p, phát tri n m t ng d ng qu n lý h c sinh
đ minh h a v nh ng l i ích mà Google App Engine mang l i
1.3 Ph ng pháp nghiên c u
• Áp d ng công ngh Servlet & JSP
• S d ng FrameWork Apache Struts, Apache Struts là m t web Application
mô hình MVC
• S d ng c s d li u App Engine Datastore, s d ng m t chu n gi ng l nh
ứ Giáo viên ch nhi m l p.v.v
• Thanh toán tr c tuy n (Online payment)
ứ Cho phép ph huynh đóng ti n tr c tuy n
• Phiên b n mobile
ứ ng d ng có th xem đi m ngay tr c ti p trên mobile, ch c n Mobile có k t
n i GPRS ho c WIFI
• Java Mail Service
ứ Kh n ng g i mail t đ ng C p nh t các thông báo c a nhà tr ng đ n ph huynh
1.5 B c c báo cáo
• Ch ng 1: T ng quan
ứ ch ng này s nói v m c đích nghiên c u c a đ tài, ph ng pháp th c
hi n c ng nh tính hi u qu c a đ tài
Trang 12• Ch ng 2: C s lý thuy t
ứ Các d ch v mà Google App Engine cung c p
ứ Giao ti p v i c s d li u Datastore
ứ Chi ti t v Framework Struts
ứ Chi ti t v giao d ch tr c tuy n (Online Payment)
Trang 13Ch ng 2 C S LÝ THUY T
2.1 T ng Quan i n Toán ám Mây
T “ ám mây” trong i n toán đám mây th c ch t ch là 1 phép n d đ mô t Internet Theo đ nh ngh a thì đi n toán đám mây là bi n pháp s d ng d a trên k t n i
li u N u nh chúng ta s d ng nh ng ng d ng web t các hãng l n nh Google ho c Microsoft thì chính chúng ta đang s d ng Cloud Computing Các ng d ng web nh Gmail, Google Calendar, Hotmail, SaleForce, Dropbox và Google Docs đ u d a trên
trên Internet
Hình 2.1 Mô hình các c m máy ch trên đám mây
ch y, nâng c p và đ m b o N u các doanh nghi p áp d ng i n toán đám mây, h s
v n s d ng đ c các ng d ng y h t nh ng chúng l i đ c đ t các c m máy ch trên Internet Các doanh nghi p ch vi c k t n i qua m ng Internet mà không ph i m t chút công s c nào đ b o trì, b o d ng, nâng c p, ch y máy ch Không nh ng th , các doanh nghi p còn có th cho khách hàng c a h s d ng ng d ng mà không ph i
m t công cài đ t
Trang 142.1.1 Gi i pháp c a đi n toán đám mây
Hình 2.2 Các gi i pháp v cung c p các d ch v tài nguyên
công ty l n nh Microsoft, Google có hàng ch c trung tâm d li u n m r i rác kh p n i trên th gi i Các công ty l n này s cung c p các d ch v cho phép doanh nghi p có th l u tr và qu n lý d li u c a h trên các trung tâm l u tr
̇ V n đ v s c m nh tính toán
Có 2 gi i pháp chính:
• S d ng các h th ng tính toán song song, phân tán
Cung c p các d ch v nh IaaS (infrastructure as a service), PaaS (platform as a service), SaaS (Storeage as a service)
Trang 152.1.2 C u trúc các ph n t o nên đám mây
Hình 2.3 Các ph n t o nên đám mây 2.1.2.1 Các d ch v ng d ng (SaaS)
T ng d ch v ng d ng này l u tr các ng d ng phù h p v i mô hình SaaS ây là nh ng ng d ng ch y trong m t đám mây và đ c cung c p theo yêu c u ôi khi các d ch v này đ c cung c p mi n phí và các nhà cung c p
d ch v t o ra doanh thu t nh ng th khác nh các qu ng cáo Web và nhi u khi các nhà cung c p ng d ng t o ra doanh thu tr c ti p t vi c s d ng d ch
đ c nh c các cu c h n khi s d ng Google Calendar, thì b n đã quen thu c
v i t ng trên cùng c a đám mây ây ch là m t vài ví d v các ki u ng d ng này
Các ng d ng đ c cung c p qua mô hình SaaS làm l i cho ng i tiêu dùng b ng cách gi i phóng cho h kh i vi c cài đ t và b o trì ph n m m và các
ng d ng có th đ c s d ng thông qua các mô hình c p phép có h tr tr
ti n đ s d ng
2.1.2.2 Các d ch v n n t ng (PaaS)
m t t p h p các d ch v Các d ch v đây đ c dành đ h tr cho các ng
d ng Các ng d ng này có th đang ch y trong đám mây và chúng có th đang
n ng m r ng c n thi t trong m t đám mây, các d ch v khác nhau đ c đ a ra đây th ng đ c o hóa Các ví d trong ph n này c a đám mây bao g m Amazon Web Services, Boomi, và Google App Engine Các d ch v n n t ng
đáp ng các nhu c u c a ng i dùng b ng cách cung c p c s h t ng ng
d ng d a theo yêu c u
2.1.2.3 Các d ch v c s h t ng (IaaS)
Trang 16đây, chúng ta th y m t t p h p các tài s n v t lí nh các máy ch , các
nguyên theo yêu c u Ví d v các d ch v c s h t ng bao g m IBM Bluehouse, VMware, Amazon EC2, Microsoft Azure Platform, Sun ParaScale Cloud Storage
2.1.3 i n toán đám mây v i Google App Engine
server) Google cung c p các d ch v hai t ng, t ng ng cao nh t c a đám mây
là SaaS, Google cho phép s d ng các d ch v c a h nh Gmail, Google Doc và
t ng Paas h cung c p các t p API dành cho các doanh nhi p, cá nhân, hay t ch c
đ h tr cho các ng d ng web Application s d ng các d ch v hosting c a Google, đ c g i là Google App Engine (GAE)
2.2 Ki n trúc Google App Engine
2.2.1 T ng quan Google App Engine
Nhi u doanh nghi p s d ng r t nhi u ph n c ng đ ch y các ng d ng nh các c s d li u, các máy ch ng d ng, các h th ng qu n lý thay đ i và các công c l n v t tìm l i Tuy v y, ngày nay, các ph n c ng này này có th d dàng
v t b đ thay b ng vi c s d ng chính gói ph n m m y d i d ng m t d ch v đang ch y trên m t c s h t ng c a ng i, hay t ch c nào đó khác
n a, các công ty này có kh n ng qu n lý m r ng, sao l u và b o m t Amazon và
nhi u đ i m i xung quanh các khía c nh c a vi c ch y các n n t ng ph n m m sao cho hi u qu
App Engine c a Google là m t n n t ng th c s đ xây d ng và tri n khai
ng d ng Web Java, Python và Go trên c s h t ng m r ng c a Google Nó không yêu c u l phí c p phép s d ng (tr ra m t s th vi n ph n m m mà
Engine là hoàn toàn mi n phí cho đ n khi đ t đ n ng ng v m c s d ng, dung
đ t t i đi m mà Google b t đ u g i hóa đ n tính phí, thì ng d ng Web c a chúng
ta rõ ràng đã t o ra l u l ng đáng k , có nhi u ng i xem và có lãi
Trang 17Hình 2.4 Ki n trúc Google App Engine cho Java 2.2.2 Môi tr ng phát tri n
M t là Java Runtime Environment, Python Runtime Environment và Go Runtime
công ngh mà chúng ta s d ng đ phát tri n ng d ng
d ng có th phát tri n b ng ngôn ng Java, hay h u h t các ngôn ng khác mà có
th ch y trên JVM nh PHP(s d ng Quercus), Ruby (s d ng JRuby), JavaScript,
các công ngh web chu n hi n nay nh servlet và Java Persistence API
Python 2.5 đ c c i ti n t phiên b n CPython Môi tr ng Python trên Google App Engine cho phép các ng d ng Python s d ng CGI, m t th vi n chu n h
nh là Django, Web2py, Pylons và App Engine còn ch a nhi u th vi n c a riêng
nó
Trang 18Môi Tr ng Go h tr cho các ng d ng đ c vi t b ng ngôn ng Go phiên
App Engine Trong gói SDK c a GAE đã ch a trình biên d ch c a Go và m t th
vi n chu n
gi ng nhau trong vi c truy c p d li u: m t ng d ng đ c đ nh tuy n t i máy ch
c a Google, sau đó máy ch s xem yêu c u và chu n b d li u, n u có d li u
trình thông d ch riêng
T t c các ng d ng c a server c n m t trình thông d ch riêng (JVM hay
2.2.3 Các lo i t p tin t nh trên server
M t website có r t nhi u tài nguyên.H u h t các website có resource đ c
c p phát cho trình duy t mà không có s thay đ i trong quá trình ho t đ ng th ng xuyên c a nó Hình nh và CSS đ c mô t nh là s xu t hi n c a các trang web, mã JavaScript giúp ch y các tác v trên trình duy t, và các trang HTML không có các thành ph n d li u đ ng là các ví d c a nh ng tài nguyên này, đ c
g i chung là các t p tin t nh S c p phát tài nguyên này cho browser không liên quan t i mã code c a ng d ng, không c n thi t và không hi u qu đ đáp ng t các máy ch Thay vào đó, App Engine cung c p m t thành ph n chuyên bi t c a máy ch chuyên d ng đ cung c p t nh các t p tin này Các server này đ c t i u
tài nguyên t nh
c nh trong các t p tin c u hình bao g m: các URL t nh c a t p tin, các lo i n i
đ d ng hình c a trang khi trang đ c load M c đ nh trong GAE thì các file hình
nh và CSS trong th m c resouse c a ng d ng đ u là các t p tin Static
2.2.4 DataStore
H u h t các ng d ng web h u ích c n ph i l u tr thông tin trong vi c x
d li u Tuy nhiên, khó kh n đ c đ t ra khi có nhi u k t n i đ ng th i đ yêu c u
ph n c ng đ có th đáp ng đ c nhi u yêu c u cùng lúc
Hi n nay, các h th ng l u tr d li u ph bi n nh t cho các ng d ng web
Trang 19d li u bao g m các kho d li u phân c p (XML) và c s d li u h ng đ i
lo i t t nh t phù h p cho m t ng d ng ph thu c vào b n ch t d li u c a ng
d ng Và m i lo i c s d li u có nh ng k thu t c a riêng mình đ phát tri n qua các h th ng các máy ch
H th ng c s d li u c a Google App Engine g n gi ng nh t v i m t c
đi u này có th s yêu c u thay đ i cách suy ngh v d li u c a ng d ng
2.2.5 Các lo i D ch V
M i quan h gi a datastore và th i gian th c thi đó là m t lo i d ch v : d ch
v này cung c p các t p API đ truy xu t vào h th ng c s d li u Google App Engine bao g m m t s d ch v h u ích cho các ng d ng web D ch v b nh Cache là m t d ch v giúp kh n ng truy xu t nhanh vì chính l i th c a nó là
đi m c a nó là khi server có s c v m t đi n hay t t máy thì các giá tr ghi t m
th i trong memcache b xóa hoàn toàn Nh tên g i c a nó, d ch v memcache s
d ng nh là m t b nh cache đ l u các k t qu c a các truy v n th ng xuyên
ho c th c hi n các phép tính toán
ng d ng c a App Engine có th truy xu t đ n các tài nguyên c a các trang web khác s d ng d ch v URL Fetch D ch v này t o ra k t n i HTTP t i server khác trên internet đ nh n v tài nguyên
ng d ng App Engine có th g i mail s d ng d ch v Mail Tin nh n có
th g i đ n các user khác trong Domain ho c ngoài Domain và có th nh n mail t các user khác N u ng d ng đ c c u hình đ nh n mail thì tin nh n s đ c g i
đ n đ a ch c a ng d ng, sau đó ng d ng s đ nh tuy n t i Mail service và hi n
th trên webform n u có yêu c u
Ngoài g i nh n Mail App Engine còn cho phép ng d ng có th nh n tin
nh n chat c a Google Talk s d ng giao th c XMPP b ng d ch v XMPP service
X lý nh c ng là m t ph n trong d ch v c a App Engine bao g m các
d ch v xoay nh, c t nh, hi n th nh…
2.2.6 Google Accounts
App Engine có kh n ng tích h p các tài kho n Google vào ng d ng, các
Google Docs và Google Calendar S b o m t h n n u chúng ta có th s d ng tài kho n Google đ ch ng th c thay vì s d ng m t h th ng đ ng nh p riêng T t nhiên, Chúng ta có th s d ng h th ng riêng c a chúng ta ho c là m t nhà cung
c p khác mà GAE có h tr nh là OpenID
2.2.7 Các h n ch c a Google App Engine
Trang 20App Engine cung c p ph ng th c k t n i an toàn(HTTPS) cho tên mi n
th c k t n i này cho tên mi n khác Google account đ ng nh p luôn luôn s d ng
ng d ng s d ng d ch v URL Fetch đ t o k t n i HTTPS và g i yêu c u
đ n m t website khác, nh ng App Engine không ki m tra đ c certificate (gi y
ch ng nh n) s d ng trên máy ch t xa
2.3 Các thành ph n c a Google App Engine trong Java
2.3.1 BackEnds
Backends đ c mô t nh là m t ph n ph tr c a GAE, là m t ng d ng
đ c bi t không có gi i h n th i gian yêu c u, có b nh cao h n và t ng b ng thông CPU BackEnds đ c thi t k cho các ng d ng c n hi u su t nhanh h n,
c n b nh nhi u h n, và các quá trình yêu c u là liên t c Nh ng ph n ph tr này s tính phí theo th i gian ho t đ ng
đ CPU gi m đi đáng k
tâm d li u b ng cách s d ng m t h th ng d a trên thu t toán Paxos Tùy
Trang 21toàn b h th ng N u có m t khóa, các th c th có th tìm ra m t cách nhanh chóng Khóa đ c l u tr nh là m t thu c tính trong th c th M t ph n c a khóa là ID c a ng d ng, đ đ m b o r ng các ng d ng khác không th truy
c p vào ng d ng c a chúng ta, và ng d ng c a chúng ta không th truy c p vào ng d ng khác Sau khi th c th đ c t o ra thì khóa không th thay đ i
Ta có th hình dung đ i v i CSDL quan h thì 1 entity đ c ví nh là 1 dòng record trong m t b ng, tuy nhiên có m t s khác bi t đôi chút Kho d
th kho d li u c a App Engine đã c g ng xây d ng h t t t c nh ng đ c đi m
Trang 22v n có c a CSDL quan h đ đem l i cho ng i phát tri n s quen thu c Chúng ta v n có nh ng câu query, transaction, khóa … nh chúng ta t ng làm
vi c v i CSDL quan h
u tiên là entity, m i entity s có 1 khóa đ phân bi t mình v i t t c các entity khác trong datastore Trong datastore không h có b ng nh trong
là 1 cái b ng r t l n, đó là lý do mà nó có tên là BigTable Vì th khóa dùng đ phân bi t entity này v i t t c các entity khác trong cái b ng to l n y Khóa có
2 d ng, chúng ta có th t đ t tên cho khóa đ có th s d ng sau này, ho c n u
entity Vì th , 1 entity ho c là có tên khóa, ho c là có s id c a khóa Vi c gán tên cho khóa ch x y ra khi entity đ c kh i t o và giá tr đó không th thay đ i
đ c khi entity đã đ c t o ra r i
M i entity có 2 lo i thu c tính: thu c tính t nh (fixed property) và thu c tính đ ng (dynamic property) V i thu c tính t nh, ta có th hình dung nó nh
là các c t trong CSDL quan h , có giá tr và cùng ki u d li u Tuy nhiên đ i
v i thu c tính đ ng, s l ng thu c tính này thay đ i tùy vào m c đích c a
các ki u d li u trên datastore đã đ c đánh ch m c m t cách t đ ng Tuy nhiên chúng ta ph i khai báo ch m c cho nh ng thu c tính c n s d ng trong câu query vì đ y là yêu c u b t bu c c a datastore
Trong datastore, đ có th l y đ c các entity ch a d li u, ta có 2 cách
Th nh t là bi t khóa c a nó và l y d a vào khóa Th 2, ph bi n h n, là s
d ng câu truy v n (query) Trong datastore, các thu c tính đ c s d ng trong câu query b t bu c ph i đ c khai báo ch m c N u không câu query s không
xu t d li u chu n là: Java Data Objects(JDO) và Java Persistence API (JPA)
V i vi c s d ng 1 trong 2 giao di n trên, chúng ta có th t o ra đ c th c th
v i thu c tính c đ nh t o ra th c th lo i A, ta c n đ nh ngh a m t class A
và khai báo các thu c tính kèm theo ki u d li u mà ta mu n th c th c a ta có
Engine nh n bi t chúng
Chúng ta giao ti p v i Datastore b ng cách s d ng các hàm get(), put(),delete() đ l y, t o m i và xóa m t th c th trong Datastore Các hàm này
Trang 23DatastoreService datastore=
DatastoreServiceFactory.getDatastoreService();
th c th mà GAE h tr
Value type Java type Sort order Notes
Byte string,
short
com.google.appengine.api.da tastore.ShortBlob byte order
Up to 500 bytes A value longer than
500 bytes throws a JDOFatalUserException
Byte string,
long
com.google.appengine.api.da tastore.Blob n/a up to 1 megabyte;
not indexed
email address com.google.appengine.api.datastore.Email Unicode
floating point
number
float, java.lang.Float, double, java.lang.Double numeric 64-bit double
precision, IEEE 754geographical
point
com.google.appengine.api.da tastore.GeoPt
by latitude, then longitude
Accounts user
com.google.appengine.api.us ers.User
email address in Unicode order
integer
short, java.lang.Short, int, java.lang.Integer, long, java.lang.Long
numeric
Stored as long integer, then converted to the field type Out-of-range values overflow
Trang 24key, blobstore com.google.appengine.api.blobstore.BlobKey byte order
key, datastore
com.google.appengine.api.da tastore.Key, or the
referenced object (as a child)
by path elements (kind,
ID or name, kind, ID or name )link com.google.appengine.api.datastore.Link Unicode
messaging
handle
com.google.appengine.api.da tastore.IMHandle Unicode
postal address com.google.appengine.api.datastore.PostalAddress Unicode
telephone
number
com.google.appengine.api.da tastore.PhoneNumber Unicode
Text string,
Up to 500 Unicode characters A value longer than 500 characters throws a JDOFatalUserException.
Text string,
long
com.google.appengine.api.da tastore.Text n/a up to 1 megabyte;
not indexed
Hình 2.6 Các ki u d li u đ c h tr b i GAE 2.3.2.2 Transactions
li u đ ng th i H u h t các h qu n tr c s d li u đ u đ m b o tính toàn v n
d li u khi th c hi n nhi u m t t p h p các ho t đ ng, m t t p các ho t đ ng
đó đ c đ c th c hi n liên t c đ c g i là m t transaction M t h th ng h
Trang 25tr Transaction đ m b o r ng n u m t giao d ch thành công, t t c các ho t
đ ng trong giao d ch đ u đ c hoàn thành N u có b t kì m t l i nào phát sinh
t m t ho t đ ng bên trong vì b t c lý do gì thì d li u s tr v tr ng thái lúc
ban đ u, lúc ch a th c hi n Transaction
M t ho t đ ng có th th t b i có th là do s l ng ng i truy c p cùng
ph i đ ng kí v i nhà cung c p d ch v và b t đ u tính phí Tùy tr ng h p th t
b i mà phát sinh các exception khác nhau nh DatastoreTimeoutException,
ConcurrentModificationException, or DatastoreFailureException
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService() Transaction txn = datastore.beginTransaction();
try { // Các liên k t v i các ho t đ ng con txn.commit();
} finally {
if (txn.isActive()) { txn.rollback();
} }
Transactions là m t tính n ng tùy ch n c a Datastore nên không c n s
d ng yêu c u ph i s d ng Transaction trong các ho t đ ng l y d li u đ đ m
b o tính toàn v n d li u
Hình 2.7 Mô hình c p nh t c a d li u c a Transaction
Khi ng d ng s d ng Transaction cho m t nhóm các th c th ,
Trang 26đ i và đ c đánh d u là “uncommited” Khi ng d ng k t thúc các Transaction
không thay đ i k t khi Transaction b t đ u, thì các thay đ i c a giao d ch
đ c đánh d u là “commited”, có ngh a là các giao d ch đã thành công Và
đ u Transaction thì datastore s h y các giao d ch hi n t i và thông báo th t
b i Khi các d li u trong Journal đ c đánh d u toàn b là Commited ( i m C).Thì datastore b t đ u áp d ng t t c các thay đ i cho các th c th theo th
t trong hàng đ i
2.3.2.3 Java Data Object (JDO)
JDO là m t giao di n chu n giúp cho vi c l u tr các đ i t ng có ch a
d li u vào trong m t c s d li u Gói giao di n này cho phép s d ng các truy v n đ l y v các đ i t ng trong database, đ c, ghi d li u, và t ng tác
v i m t c s d li u b ng cách s d ng các Transaction M t ng d ng s
d ng gói JDO có th làm vi c v i m t lo i database khác mà không c n m t
lo i liên k t đ c bi t nào, bao g m c c s d li u quan h , c s d li u phân
Trang 27• Khi biên d ch project ph i có m t b c biên d ch “đ c bi t” đ các l p
d li u đ c biên d ch và k t h p chúng v i JDO
chúng ta đ u đ c Eclipse làm h Ti p sau s đi vào chi ti t nh ng c u hình trong file jdoconfig.xml:
Hình 2.9 C u hình JDO trong Google App Engine
̇ nh ngh a d li u v i JDO
M i đ i t ng đ c l u tr b ng JDO là m t th c th trong Datastore
chính M t thu c tính trong class có th có m t ho c nhi u giá tr , JDO h tr
Trang 28• java.util.TreeSet< >
• java.util.Vector< >
N u ki u d li u đ c khai báo là List thì thu c tính đó s tr v ki u ArrayList, n u ki u là Set thì datastore s tr v HashSet, n u thu c tính đ c khai báo là SortedSet thì ki u datastore tr v là TreeSet
̇ T o m i, L y v và xóa d li u trong JDO
makePersistent() c a PersistenceManager đ t o m i d li u trong Datastore
makePersistentAll( ) v i m t t p Collection các objects
đ i t ng thông qua khóa chính M t trong nh ng cách đ c p nh t d li u đó
xóa đ i t ng ra kh i datastore, g i hàm deletePersistent() c a PersistenceManager Mu n xóa t t c các đ i t ng thu c class đó g i deletePersistentAll( )
̇ Java Data Object Query Language (JDOQL)
m i query:
Query query = pm.newQuery(JDOQL string);
Trang 29C u trúc ng pháp c a JDOQL:
SELECT [UNIQUE] [<result>] [INTO <result-class>]
[FROM <candidate-class> [EXCLUDE SUBCLASSES]]
[WHERE <filter>]
[VARIABLES <variable declarations>]
[PARAMETERS <parameter declarations>]
m t kho ng là setOrdering() và setRange()
2.3.2.4 Java Persistence API (JPA)
Java Persistance API (JPA) là m t giao di n chu n cho vi c l u tr d
Transaction App Engine Java SDK s d ng JPA 1.0 cho c s d li u c a App
h nh ng App Engine Datastore không ph i là m t c s d li u quan h Vì
th , s có m t s ch c n ng c a JPA mà App Engine không h tr
Trang 30Hình 2.10 Mô Hình JPA
• Nh ng file jar c a JPA và plugin DataNucleus c a App Engine ph i
persistence.xml
Trang 31Hình 2.11 Mô Hình JPA trong Google App Engine
̇ Các tính n ng h tr c a JPA
JPA cung c p m t ngôn ng dùng đ truy v n d li u t ng t SQL g i
là Java Persistence Query Language(JPQL) JPA c ng cung c p các t khóa
đ i t ng EntityManager l y v đ i t ng EntityManager chúng ta s d ng
Hình 2.12 T o đ i t ng EntityManager
Trang 32̇ Các tính n ng không h tr c a JPA trong GAE
li u quan h
• Các câu l nh truy v n t ng h p (group by, having, sum, avg, max, min)
m t lo i th c th riêng bi t trong Datastore
2.3.3 Các d ch v c a GAE
2.3.3.1 BlobStore Java API
Hình 2.13 Cách th c l u d li u c a BlobStore trong Datastore
dùng upload file s d ng giao th c HTTP, BlobStore t o ra blob t n i dung
dùng có th s d ng file thông qua key này, ho c blob có th đ c đ c tr c ti p
lo i l n nh là hình nh ho c Video Blob không th s a đ i sau khi nó đ c
com.google.appengine.api.blobstore.BlobstoreService.MAX_BLOB_FETCH_SIZE trong GAE
Trang 33t o ra blob t file đ c upload, s d ng
chúng ta v a upload và l u tr trong Datastore đ ph c v cho ng i dùng khi
c n thêm thông tin v Blob mà chúng ta v a upload Sau khi t o ra blob, Blob
có th đ c chia s cho các ng i dùng khác, th vi n cung c p ph ng th c serve đ ng i dùng có th l y v Blob blobstoreService.serve(blobKey, res);
blob r ng m i s d ng createNewBlobFile() và có th ghi d li u vào blob m i
t o này b ng File API
2.3.3.2 Capabilities
Capabilities cung c p m t s th vi n dùng đ ki m tra c u hình mà
nào dùng đ c và cái nào không dùng đ c Có hai tr ng thái mà Capabilities
tr v là DISABLED và ENABLED N u s d ng đ c thì tr ng thái tr v là
Hình 2.14 Cách s d ng Capabilities