Thursday, March 18, 2010

GAE Tabanina Veri Yuklemek

Google App Engine ortaminda uygulama icin gereken bazi baslangic verileri olabilir. Bu verileri disaridan GAE'ye dahil etmek icin toptan yukleyici olarak "appcfg.py upload_data" kullanilabilir. Bu komut ile duz dosyayi GAE tabanina toptan (bulk) olarak gondermek mumkun. Fakat bundan once duz dosyadaki her satirin bir objeye nasil tekabul ettigini tanimlamamiz gerekiyor.

GAE veri tabani bir anahtar/deger tabani (key/value store). Bu tur tabanlar hakkinda birkac yazi yazdik; bir nevi Hash dictionary'nin dagitik calisan versiyonu olan bu tabanlar devasa boyutlarda yuk olan Web ortamlarin demirbasi haline geldi. Amazon, Facebook, Friendfeed hep benzer yaklasimlari kullaniyorlar.

GAE ortamindaki Bigtable teknolojisi Google'in kendi urunleri icin de kullandigi taban (Gmail gibi). Bulut kavraminin, ozellikle Google ortaminda oldugu gibi idareli ve tanimli bir ortam icin, onemli bir avantaj sudur. Tabana yazarsiniz, ve isin olceklenmesiyle hic ilgilenmezsiniz. Eger verinin kopyalanmasi gerekiyorsa (mesela cografi lokasyana gore, kullaniciya daha yakin bir makinaya veri yakin olacaksa), taban onu arka planda yapar. Yedeklemeyi yapar. Olceklemeyi yapar. Programci sadece get(), put() komutlariyla ugrasir. Veri yuklemeye gelelim. app.yaml dosyasinda
handlers:
- url: /remote_api
script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin
tanimini eklemeniz lazim. Duz dosyadaki ve veri tabanindaki kayiti, class'i soyle tanimlariz. Mesela bir models.py dosyasi icinde
from google.appengine.ext import db

class Txn(db.Model):
code = db.StringProperty()
date = db.DateProperty()
low = db.FloatProperty()
high = db.FloatProperty()
price = db.FloatProperty()
increase = db.FloatProperty()
volume = db.FloatProperty()
Sonra loader.py adli bir class icinde
import datetime
from google.appengine.ext import db
from google.appengine.tools import bulkloader
from models import *

class TxnLoader(bulkloader.Loader):
def __init__(self):
bulkloader.Loader.__init__(
self, 'Txn',
[('code', str),
('date', lambda x: datetime.datetime.strptime(x, '%Y%m%d').date()),
('low', float),
('high', float),
('price', float),
('increase', float),
('volume', float)
])


loaders = [TxnLoader]
Eger Python yukleme cevre degiskenini degistirmek istemiyorsak, o zaman
import sys
sys.path.append('[GELISTIRME DIZINI]')
ibaresini de kullanmak gerekecek.

Verileri gelistirme ortamina yuklemek icin dev_appserver.py baslatiriz, ve
appcfg.py upload_data --config_file=loader.py --filename=[VERI DOSYASI]
--kind=Txn --url=http://localhost:8080/remote_api [GELISTIRME DIZINI]
komutunu kullaniriz. Sonuc ortamina yuklemek icin once "appcfg.py update" ile kodlari gondeririz, sonra
appcfg.py upload_data --config_file=loader.py --filename=[VERI DOSYASI]
--kind=Txn [GELISTIRME DIZINI]

No comments: