Session 10 – Session 13
Kelompok 5
Nama Anggota :
1. Amelia – 1901505535
Kelas : LA01
Session 10 : Object-Oriented Databases Design and
Implementation: OMS Avon
OMS Avon
OMS Avon adalah sebuah implementasi sistem manajemen data OMS berdasarkan db4objects objek
berorientasi-database. Avon terdiri dari inti database yang menerapkan semua fungsi yang
ditetapkan oleh OM data model. Selanjutnya, menyediakan akses ke data dikelola melalui bahasa
Model objek (OML), serta melalui antarmuka sesuai OMSjp. (Sumber :
http://maven.globis.ethz.ch/projects/avon/)
Storage layer
Model layer
Internal
• Fungsi internal
Query Tree
• OMSDriver
• omsjp:platform://user/password@host:port/database
• OMSDatabase
• Interface query
• Schema management
• multiple instantiation
• multiple inheritance
• Kelas instansi aplikasi khusus dapat digunakan sebagai pengganti kelas instansi generik
• Jika model data tidak memiliki multiple inheritance, Java inheritance dapat
digunakan untuk mengimplementasikan kelas model aplikasi tertentu
• Jika model data menggunakan multiple inheritance, kelas model aplikasi khusus
tidak dapat menggunakan warisan Java
Instrumentasi mendukung
• OMSjpfaçade pola
• multi-nilai atribut
• asosiasi
Contoh Instrumentasi
Kelas Hierarchy Instrumentasi
Mengetik penciptaan
• adanya tipe OM diperiksa menggunakan nama jenis Java yang memenuhi syarat
Obyek referensi
• OM jenis diciptakan untuk properti yang referensi jenis non-koleksi non-dasar dan
Konvensi
kelas-kelas
• harus tidak abstrak
• harus memiliki konstruktor default publik
properti
• harus dapat diakses melalui getter dan setter accessormethods yang mengikuti Java
Beans konvensi
• publik TypegetProperty ()
• publik kekosongan setProperty (Type)
• semua nama metode lainnya tidak harus berisi mendapatkandan setprefiks
• kata kunci sementarabisa digunakan untuk properti non-persistent
• array tidak didukung sebagai kelas anggota
• Daftar dan Set didukung, semua Koleksi lainnya Java dilarang.
• langsung
Akses tanpa batas ke OM Fungsi
Untuk pengguna RxO DB terdiri dari kedua tabel dinormalisasi tradisional T dan kelas kompleks C,
Bersatu dengan kedua kunci relasional dan referensi objek.
SEBUAH seperangkat perintah deklaratif, memperpanjang SQL, digunakan untuk membuat dan
mengubah kelas dan untuk mengelola data objek. Dengan ini, tidak ada bahasa pemrograman OO
eksternal yang diperlukan untuk membuat model domain obyek yang kompleks.
Complex objects
Di RxO negara DB objek apapun disajikan dengan seperangkat nilai-nilai asli untuk sistem relasional,
persis nilai-nilai domain dan nilai-nilai relasional.
Demikian,objek kelas didefinisikan sebagai satu set skalar (inc.referensi) dan tabel properti, yang
bersama-sama menyajikan keadaan objek, dan metode yang digunakan untuk mengubah state.
kendala opsional (keys and foreign key) dapat diatur untuk kelas.
Dari perintah tersebut kelas baru dapat ditambahkan dalam sistem kerja ketika itu perlu. Mungkin
Multiple Inheritance akan terjadi
Kelas interface sangat dipisahkan dari implementasi. Setiap elemen didefinisikan dalam interface
harus dilaksanakan, baik sifat dan metode.
Properti (antara scalar & tabel) yang bisa di implementasikan pada penyimpanan. Sifat disimpan
menyimpan nilai-nilai mereka terus-menerus, seperti tabel.
dihitung. Sifat dihitung bertindak seperti pandangan.
Implementasi ini menggunakan SELECT atau UDF. Pelaksanaan metode ini mirip dengan UDF atau
UDP. Dengan demikian kelas bersatu kemungkinan tabel, pandangan dan disimpan fungsional
RDBMS tradisional
Maksud dari class tersebut dapat di jadikan kembali selama inheritance. Juga implementasi kelas
dapat diubah dalam kelas non-empty tanpa sistem total pembuatan kembali.
Sebuah objek di RxODB ada sejak dibentuk sampai itu akan de hancur jelas. Semua benda dapat
diakses sebagai elemen dari kelas mereka (sehingga kelas dapat didefinisikan sebagai “satu set
bernama objek yang ada kelas”).
Karena fitur ini setiap objek dapat diakses, bahkan tidak ada referensi di atasnya, sehingga referensi
tidak wajib dalam perintah manajemen dan akses non-navigasi untuk benda-benda mudah mungkin.
Referensi hanya diperlukan untuk menghasilkan struktur obyek yang kompleks.
Selama sistem perhitungan tersebut mengikat implementasi dari sifat, sehingga hasilnya dapat berisi
kedua disimpan dan dihitung nilai-nilai secara bersamaan. Jika implementasi berubah query akan
mengembalikan hasil baru. Jadi, representasi data relasional langsung tergantung pada internal
kelas. Query dapat menggabungkan data dari kedua kelas dan tabel tradisional.
Ditampilkan secara resmi bahwa setiap pelaksanaan properti dihitung atau metode dapat diubah
menjadi prosedur pada struktur relasional yang mendasari dengan cara yang setiap langkah dari
setiap algoritma sumber tertentu dalam pelaksanaannya dilakukan secara bersamaan (dalam operasi
relasional tunggal) pada data kelompok obyek untuk setiap kelompok benda. Dengan cara ini setiap
pengolahan data yang diberikan dalam jangka objek diterjemahkan ke dalam pengolahan relasional.
Sebagai keuntungan, kemungkinan ini memungkinkan re-order dan meminimalkan operasi disk
selama pemrosesan kompleks set objek, sehingga pengolahan melakukan lebih cepat. Juga mungkin
tampaknya menjadi “asli” untuk penyimpanan relasional dengan organisasi data vertikal.
Versant Object Database ( juga dikenal sebagai VOD atau hanya ” Versant ” ) adalah sebuah
OODBMS yang mendukung concurrency besar dan set data yang besar. Versant menggunakan
kinerja internal dan skalabilitas tolok ukur untuk memonitor dan mengukur perilaku dari waktu
ke waktu di rilis. Versant dapat ber-interfacing dengan Java, C++, dan dotNet. OODMS ini
mengklaim sistem databasenya tidak banyak membutuhkan administrasi. Fitur-fitur yang
menarik dari Versant Object Database adalah kemampuan scalability dengan mendukung proses
multi threaded dan multi session. VOD mendukung permintaan melalui pengindekan sisi server
dan mesin eksekusi query. Versant menyediakan kemampuan query ini di sejumlah bentuk
tergantung pada bahasa yang dipilih.
Sebagai contoh, di Java VOD menyediakan VQL (Versant Query Language), JDOQL, EJB QL
dan OQL. Dalam C + + Versant menyediakan VQL dan OQL, dengan C # dukungan untuk VQL,
OQL dan LINQ. VOD akan melakukan optimasi eksekusi query berdasarkan indeks atribut yang
tersedia. Versant juga memiliki dukungan untuk query SQL standar terhadap database Versant
menggunakan driver ODBC / JDBC.
Arsitektur distribusi data pada VOD menangani pengolahan data yang didistribusikan
menggunakan dua fase komit protokol di database. Dalam proses ini, VOD menggunakan
manajer sumber daya internal yang menangani transaksi terdistribusi. Versant juga mendukung
protokol XA yang memungkinkan transaksi eksternal monitor untuk mengontrol konteks
transaksional, jadi misalnya steker ke CORBA atau aplikasi server J2EE.
Versant dalam OODBMS memiliki tools yang cukup lengkap, dalam tool tersebut juga
menyediakan fasilitas dan kemudahan karena VOD ini mendukung aplikasi ber oriented
objek. Selain itu, model versant juga memungkinkan penanganan data yang lebih sederhana,
tersturuktur, dan lebih kompleks untuk implementasi dalam database yang berorientasi objek
.
VERSANT OBJECT DATABASE ARCHITECTURE
JVI LAYERS
Fundamental Layer
- Database-sentris
- Paket com.versant.fund
Transparent Layer
- Bahasa-sentris
- Paket com.versant.trans
ODMG Layer
- Bahasa-sentris
- ODMG database dan model transaksi, koleksi ODMG
- Paket com.versant.odmgand com.versant.odmg3
CONNECTING TO A DATABASE
Aplikasi melakukan operasi database dalam sesi
- Akses ke database, metode, tipe data dan objek yang persisten
- Harus ditutup sebelum aplikasi berakhir
- Satu atau lebih sesi bisa dibuka pada waktu bersamaan
Di setiap lapisan JVI, ada implementasi sesi
Elemen sesi klien
- Cache objek
- Tabel deskriptor objek cache
Elemen sesi server
- Terkait dengan setiap database yang terhubung adalah cache halaman untuk
halaman yang baru diakses
- Cache halaman server ada dalam memori bersama dari mesin yang berisi database
yang terhubung
TRANSACTION MODEL
Setelah memulai sesi, Versant selalu dalam transaksi
- Setelah commit () atau rollback (), sebuah transaksi baru dimulai secara otomatis
- EndSession () melakukan transaksi terakhir
Transaksi memiliki karakteristik sebagai berikut
- Atomik, konsisten, mandiri, tahan lama
- Terkoordinasi: objek dikunci untuk koordinasi dengan pengguna lain
- Didistribusikan: dua fase komit untuk bekerja dengan banyak database
- Selalu hadir: kode aplikasi selalu dalam transaksi
Melakukan unit kerja
- Commit () melepaskan kunci dan flushes cache
- CheckpointCommit () menyimpan kunci dan menyimpan objek dalam cache
- CommitAndRetain () melepaskan kunci dan menyimpan objek dalam cache
OBJECT LIFECYCLE
Penciptaan objek yang persisten
- Objek Java dibuat di memori Java
- Informasi database internal per objek dalam cache objek Versant
Commit
- Data objek ditulis ke database
- "Berongga" proxy objek Java dipertahankan di ruang memori
Rollback
- Objek database baru akan dijatuhkan
Querying objects
- Query dilewatkan ke database server
- Objek proxy untuk setiap objek yang cocok di set hasil
Mengakses objek
- Secara transparan menampilkan objek atau de-serializes objek
Contoh
UPDATING OBJECTS
First Class Objects
- Perubahan pada objek kelas pertama secara otomatis diterapkan ke database saat komit
- Objek database dimodifikasi secara transparan
- Nilai tipe dasar disalin ke database
Second Class Objects
- Transparent Dirty Owner: perubahan pada objek secara otomatis diterapkan ke
database saat komit
- Persistent Aware: modifikasi SCO membutuhkan eksplisit kotor pemilik FCO
menggunakan metode TransSession.dirtyObject ()
- Alasannya adalah bahwa SCOs serialised menjadi pemilik FCO
- Jika SCO terkandung dalam dua FCO, ini akan menyebabkan dua contoh SCO di memori
Java setelah memuat ulang FCOs
DELETING OBJECTS
First Class Objects
- Hapus secara eksplisit dengan TransSession.deleteObject () dan
TransSession.groupDeleteObjects ()
- Metode ini mengacu pada objek database, contoh Java adalah sampah yang
dikumpulkan oleh JVM
- Panggilan JVM selesai () saat pengumpulan sampah, bukan penghapusan
Second Class Objects
- Dihapus secara implisit dengan menetapkan referensi ke null
- Memori akan menjadi sampah yang dikumpulkan oleh JVM
- Saat komit, FCO yang berisi tidak akan menyamarkan SCO
VERSANT COLLECTIONS
Penyimpanan koleksi Java didukung
- Array, Vector, Hashtable, LinkedList
First class object (FCO) collections
- VVector, VHashtable
Second class object (SCO) collections
- DVector
Scalable large collections
- LargeVector
ODMG collections
ODMG Collections
Ikuti spesifikasi standar ODMG
- Diimplementasikan secara Versant sebagai lapisan tipis di atas ikatan transparan
- Kelas koleksi juga tersedia dari TransSession
ODMG 2.0
- Koleksi gaya JDK 1.1
- Paket com.versant.odmg
ODMG 3.0
- Koleksi gaya JDK 1.2
- Paket com.versant.odmg3
- Perluas java.util.Collection interface
- Sebanding merekomendasikan penggunaan gaya koleksi ini
ODMG COLLECTION QUERY FACILITIES
Koleksi ODMG menyediakan fasilitas permintaan tambahan
VCollection mengimplementasikan java.util.Collection untuk menambahkan kemampuan
query pada koleksi
- BooleanexistsElement (Stringpredicate)
- DCollectionquery (String predikat)
- Iteratorelect (String predikat)
- Object selectElement (String predikat)
Query atas koleksi ODMG
- Hanya objek dalam koleksi yang dipertimbangkan
- Predikat adalah tempat dari Query VQL
- Hanya koleksi yang gigih yang bisa ditanyakan
Versant Query Language (VQL)
VQL 6
- VQL 6 queries adalah subset dari OQL seperti yang ditentukan oleh ODMG 2.0
- Tidak ada pemilahan, tidak ada ekstensi untuk kemampuan baru, API terbatas
- Seperti pada Versant 7.0, query VQL 6 tidak berlaku lagi
VQL 7
- Dukungan untuk ekspresi kompleks
- Dukungan untuk penyortiran sisi server
- Meningkatkan kemampuan pengindeksan
Query VQL ditentukan sebagai string query yang dikompilasi, dioptimalkan dan dieksekusi
pada server basis data
- Kueri dapat dihitung parameternya
- Parameter dimulai dengan $ diikuti oleh karakter, angka atau garis bawah
- Parameter terikat pada nilai menggunakan metode bind ()
EVENT NOTIFICATION
Perbanyakan kejadian dari database ke klien terdaftar
- Model acara Java Beans
- Panggil balik ke objek pendengar acara
Event types
- class events: buat, ubah atau hapus instance
- object events: memodifikasi atau menghapus objek atau kelompok objek
- transaction demarcationi: memulai atau mengakhiri transaksi
- user-defined events
Antarmuka pemrograman aplikasi
- Paket com.versant.event
- Sub-interface VersantEventListener untuk setiap jenis acara
- Class EventClient menyediakan fungsi sisi klien
EVENT CHANNELS
Event komunikasi berdasarkan saluran event
- Abstraksi untuk menyiarkan pemberitahuan acara
- Pendengar acara didaftarkan melalui saluran
- Setelah pembuatan, aplikasi bisa "tune-in" ke saluran acara
Ruang nama global untuk saluran event
- Gigih melintasi aplikasi klien
Kategori
- Berbasis kelas: acara kelas untuk seperangkat kelas tertentu
- Berbasis objek: peristiwa objek untuk satu set objek tertentu
- Berbasis query: event kelas untuk objek yang sesuai dengan kueri tertentu
Manajemen saluran melalui EventClient
- Buat saluran acara baru menggunakan ChannelBuilder
- Mengakses saluran acara yang ada
SCHEMA EVOLUTION
Dukungan untuk skema evolusi berdasarkan antarmuka pemrograman aplikasi
Fundamental binding
- inserting, appending, dropping, danrenaming attributes
- adding dan renaming classes
Transparent binding
- Metode TransSession#setSchemaOption(int) untuk mengkonfigurasi evolusi skema
otomatis
Session 13 : Open Sources OODBMS: EyeDB
Tinjauan EyeDB
The Architecture
The
Server kernel adalah subsistem manajer penyimpanan yang menyediakan layanan utama berikut:
EyeDB object model ini terinspirasi oleh model SmallTalk, loop, ObjVlisp, Java dan ODMG
Class Structure
Kelas terdiri dari nama, kelas induk kecuali untuk objek kelas yang merupakan root kelas,
satu set atribut, satu set methods dan satu set trigger:
Atribut terdiri dari jenis, optionnal array pengubah dan literal atau objek. Misalnya, menggunakan
bahasa EyeDB ODL:
Dua bahasa binding, C ++ dan Java, dan EyeDB OQL mendukung jenis polimorfisme: variabel
mungkin terikat dengan contoh-contoh dari berbagai jenis
bahwa setiap EyeDB kelas mewarisi dari kelas obyek
Jenis koleksi yang didukung oleh EyeDB adalah set, bag dan array:
Relationships
EyeDB object model mendukung hanya biner relationship, yaitu hubungan antara dua jenis.
Hubungan biner mungkin satu-satu, satu-ke-banyak atau banyak-ke-banyak tergantung pada
cardinality dari jenis terkait. Hubungan tidak bernama.
EyeDB mempertahankan integritas referensial hubungan. Ini berarti bahwa jika objek yang
berpartisipasi dalam hubungan yang dihapus, maka setiap path traversal ke objek juga dihapus.
EyeDB mendukung atribut objek: atribut semacam ini memungkinkan satu objek untuk
referensi lain tanpa referensial integritas. Atribut objek-dihargai mengimplementasikan hubungan
unidirectionnal: dalam kasus ini, EyeDB tidak menjamin integritas referensial. Catatan bahwa
unidirectionnal relationship tidak disebut hubungan.
Constraints
The not null constraint pada atribut dalam kelas X berarti bahwa tidak ada kasus kelas X
dapat memiliki nilai atribut ini tidak ditetapkan.
The unique constraint pada atribut dalam kelas X berarti bahwa seseorang tidak dapat
membuat instance kelas X yang memiliki nilai atribut yang sama dari contoh yang ada di
database.
The cardinality constraint pada contoh koleksi kelas berarti bahwa jumlah dari koleksi ini
harus mengikuti batasan cardinality
The Object Definition Language
EyeDB objek definisi bahasa (ODL) adalah bahasa berdasarkan ODL ODMG untuk
menentukan spesifikasi dari jenis objek. ODL tidak dimaksudkan untuk menjadi sebuah
bahasa pemrograman yang penuh
Seperti ODMG ODL, EyeDB ODL mendefinisikan kelas (warisan dan atribut), hubungan dan
metode signitures
Tidak seperti ODMG ODL, setiap instance kelas dapat digunakan baik sebagai literal atau
sebagai objek.
EyeDB ODL juga memungkinkan pengguna untuk menentukan apakah metode backend
(yaitu sisi server) atau frontend (yaitu sisi klien)
enum CivilState{
Lady = 0x10,
Sir = 0x20,
Miss = 0x40
};
class Address {
attribute string street;
Attribute string <32> town;
};
class Person {
attribute string name;
attribute int age;
attribute Address addr;
attribute CivilState cstate;
attribute Person * spouse inverse Person :: spouse;
attribute ser<car *> * cars inverse Car :: owner;
attribute Person *childern [];
instmethod void change_address (in string street, in string town, out string oldstreet,
out string oldtown);
class Car {
attribute string brand;
attribute int num;
attribute Person *owner inverse Person :: cars;
};
Contoh ini menggambarkan semua konsep yang telah kami jelaskan sebelumnya.
class Person Terdiri dari sejumlah atribut yang masing-masing memiliki kekhasan yang
menarik.
Atribut nama adalah array karakter ukuran variabel, yaitu sebuah string.
Atribut ini bersifat literal, yang berarti tidak memiliki identifier dalam database. Indeks
petunjuk berarti atribut ini harus diindeks untuk memberikan kueri yang efisien sesuai
dengan nilai atribut.
Atribut addr adalah atribut tipe pengguna literal. Karena atribut ini bersifat literal, atribut tipe,
Address, harus sudah ditentukan sebelumnya
1. Karakter a* mengikuti tipe pengguna, yang berarti bahwa atribut ini bukan huruf melainkan
objek (yaitu dengan identifier). Karakter * berarti referensi ke objek.
2. Petunjuk (invers Person :: spouse berikut pasangan berarti atribut ini adalah sebuah
hubungan. Karena atribut pasangan bukanlah koleksi dan atribut target pasangan bukanlah
koleksi, ini adalah hubungan satu lawan satu.
Seperti yang ditunjukkan oleh instink kata kunci, metode change_address adalah metode
contoh.
Perhatikan bahwa kata kunci ini bersifat opsional karena ini adalah defaultnya. Metode
getPersonCount adalah metode kelas seperti yang ditunjukkan oleh kata kunci classmethod .
class Employee Mewarisi dari class Person Seperti yang ditunjukkan oleh kata keyword
extends.
Ini memperkenalkan dua atribut gaji, atribut literal integer dan atasan, atribut objek yang
merujuk sebuah instance dari class person.
Perhatikan bahwa karena tidak ada indikasi hubungan (yaitu kata kunci terbalik),
atribut bos adalah atribut bernilai objek (yaitu hubungan tidak sadar):
Dalam hal ini, EyeDB tidak menjamin integritas referensial.
EyeDB menyediakan bahasa query berdasarkan ODMG OQL. Meskipun EyeDB OQL bukan
OML (yaitu Manipulasi Bahasa Objek), sebagian besar operasi bahasa umum dapat dilakukan
(operasi aritmatika dan logika, manipulasi string, kontrol aliran, definisi fungsi) dan juga
konstruksi query.
EyeDB OQL menambahkan beberapa fitur dari ODMG OQL seperti flow control (jika ada,
untuk, sementara), definisi fungsi, operator penempatan, dan operator ekspresi reguler.
Misalnya contoh berikut adalah konstruksi hukum EyeDB OQL:
Ada dua jenis objek runtime: objek runtime yang terus-menerus dan objek runtime transien.
Objek runtime bersifat persisten jika dikaitkan dengan objek database. Jika tidak, itu
sementara.
Secara default, EyeDB tidak menyediakan sinkronisasi otomatis antara objek runtime yang
terus-menerus dan objek database.
Ketika menetapkan nilai pada objek runtime yang terus-menerus, kita tidak memodifikasi
objek database yang terikat. Seseorang harus memanggil metode toko pada objek runtime
yang terus-menerus untuk memperbarui objek database yang terikat.
Perhatikan bahwa setiap manipulasi objek runtime terus-menerus harus dilakukan dalam lingkup
transaksi.
Untuk menggambarkan manipulasi objek, kami mengenalkan contoh konkret sederhana
dengan menggunakan skema C ++ API berbasis skema, berdasarkan contoh contoh ODL
sebelumnya:
Beberapa komentar dari kode sebelumnya:
1. Pernyataan Person * p = new Person (& db) menciptakan objek runtime transien. Objek
runtime ini tidak terikat dengan objek database sampai metode store dipanggil.
2. Semua metode pemilih dan pengubah seperti setName, getAddr, addToCarsColl telah
dihasilkan oleh penyusun EyeDB ODL dari konstruk ODL sebelumnya.
Penggunaan bahasa Java untuk pengikatan EyeDB telah dimotivasi oleh beberapa alasan:
1. Java adalah arsitektur independen,
2. Java sangat berharga untuk lingkungan jaringan terdistribusi,
3. Java memiliki perpustakaan yang sangat kaya di perpustakaan,
4. Java aman,
5. Java lebih mudah diprogram daripada C ++.
Pengikatan Java sangat dekat dengan pengikatan C ++: interfaces kelas identik, fungsinya sama;
Hanya bahasa yang sedikit berbeda.
Satu-satunya perbedaan yang tidak muncul dalam contoh kita adalah manajemen memori
objek.
Dalam contoh C ++, seseorang harus melepaskan semua objek yang dialokasikan; Tidak perlu
di java.