Saturday, November 15, 2014

Multiuser Geodatabase Management, Theoretical Practices, ( only for Advanced ArcGIS user, :p )

Manajemen multiuser geodatabase dalam sebuah sistem pekerjaan yang melibatkan data geospasial di lebih dari satu pengguna idealnya mengikuti workflow seperti gambar di bawah.

Sumber gambar : ESRI



1. Create 

Pembuatan geodabatase dalam lingkungan multiuser idealnya menggunakan SDE Geodatabase (bukan file atau personal geodatabase). Hal ini dikarenakan SDE geodatabase sudah mendukung akses dari lebih dari satu pengguna. SDE geodatabase tidak menggunakan format penyimpanan seperti file atau personal geodatabase tapi menggunakan RDBMS (relational database management system). Adanya RDBMS memungkinkan untuk dilakukan manajemen akses dan pengelolaan data, seperti misalnya siapa saja yang bisa mengakses data, bagaimana strategi pengamanan basis data, bagaimana metode input dan updating data, dll. DBMS yang sudah mendukung geodatabase antara lain Oracle, Microsoft SQL Server, Postgre SQL, dan ALTIBASE. 

Hal penting yang harus dipertimbangkan dalam tahap ini antara lain
- Pemilihan DBMS (komersial vs Open Source, Storage capacity, Database Features, Tablespace and multigeodatabase support, jumlah pengguna per instance, security)
- Dukungan client (desktop based ? web based ? )

Tahapan dalam proses Create antara lain
1. Instalasi ArcGIS dan DBMS
2. Koneksi ArcGIS sebagai Database Owner ke DBMS
3. Pembuatan Enterprise/SDE geodatabase di DBMS menggunakan ArcToolbox (create Enterprise Geodatabase Tool)

2. Connect 

Koneksi database ditujukan untuk berbagai tujuan, antara lain administrasi database dan penyimpanan/manipulasi data, Koneksi ke database bisa dilakukan menggunakan dua cara.

1. Direct Connection, Cara ini merupakan cara koneksi langsung ke server, dimana proses-proses yang dilakukan terhadap database dilakukan di client (arcMap, ArcCatalog). Direct Connection ideal untuk client yang kemampuan hardware-nya mendukung pengelolaan database (large size and high speed processor/Memory).
2. Application Server Connection, koneksi tidak langsung ke server. Proses-proses dilakukan di Server. Ideal untuk client yang kemampuan hardware-nya terbatas. Application server connection menimbulkan berbagai proses tambahan di server sehingga memerlukan server dengan hardware mumpuni. Untuk itu, manajemen database oleh database administrator menggunakan application server connection idealnya tidak dilakukan pada waktu - waktu database banyak digunakan. 

Identifikasi perbedaan direct dan application connection dapat dilihat di kolom Instance ketika melakukan koneksi dari client (arccatalog/arcmap). Jika kita memasukkan port number di instance berarti itu application server connection, sedangkan jika kita hanya memasukkan domain berarti itu direct connection. 

Tahap koneksi juga perlu mempertimbangkan instalasi library tambahan (dll files) yang harus dimasukkan ke lokasi instalasi software baik disisi client maupun server (DBMS). Antara lain file seperti ST_Geometry.dll untuk PostgreSQL dan SQL Server. 

3. Load Data

Tahap ini merupakan tahapan input data ke dalam geodatabase dan dilakukan oleh geodatabase administrator atau user/role yang ditunjuk untuk itu. 

Pengelola geodatabase dapat dibagi menjadi 4
1. database admin (akun sys, sa, postgres)
2. geodatabase admin user (akun sde)
3. data owner
4. data user

Data owner (akun pemilik data yang diupload ke geodatabase ) bertanggung jawab untuk 1. Mengelola permissions, 2. mengelola fields, 3. mengelola indeks, dan 4. mengelola version. Penting untuk dipertimbangkan bahwa akun data owner idealnya merupakan headless account (akun yang tidak hanya dimiliki oleh satu orang, sehingga manajemen database tidak menyulitkan apabila si orang tersebut berhalangan). Koneksi database sendiri dapat dilakukan melalui dua cara, Operation system authorization dan Database Authorization, OS authorization menggunakan akun windows untuk koneksi, sedangkan database auth diatur di DBMS atau client software (PgAdmin, SQL Server Management Studio, ArcGIS). OS auth lebih secure sedangkan Database auth lebih praktis. Headless Account idealnya menggunakan Database Authorization. 

Tahapan Pembuatan Akun Data Owner di ArcGIS
1. Buka Tool Create Database User (ArcToolBox)
2. Masukkan parameter koneksi, nama user dan password (OS or Database Auth), dan role (apabila sudah diseting)

Loading data bisa dilakukan melalui 4 cara (ArcGIS)
1. Conversion Tools (multi format melalui import export tool)
2. Simple Data Loader (Load data ke eksisting dataset, khusus untuk geodatabase/shapefile/CAD/Coverage/XML Schema with or without data)
3. Object Loader (copy paster feature melalui sesi editing di ArcMap)
4. Append Tool di ArcToolbox (Mirip simple data loader, kelebihannya bisa diintegrasikan dengan data exsisting yang sudah ada di featureclass/table)

Best Practices untuk loading/unloading data adalah dengan cara mengintegrasikan fitur Truncate Table dan Append Tool (melalui model builder atau phyton script atau manual) daripada delete data. Kelebihannya adalah konten dari feature class akan dihapus tanpa menghapus feature class itu sendiri sehingga tidak perlu mengatur ulang hak akses data untuk feature class yang bersangkutan. 

Load data secara otomatis bisa dilakukan menggunakan tiga cara, Batch execution, model builder, atau phyon script. Phyton script dan model builder lebih preferable karena tidak perlu mengatur file input dan output seperti dalam batch execution (digantikan fungsi "listing" dan "iterate/loop"). 

Storage hasil load data juga dapat dikelola melalui fitur configuration Keyword dan DBTUNE (Explained later, there are some stuffs that I still dont understand)

Migrasi data dari Older version geodatabase prior to 10.1 to 10.1 and later geodatabase. (explained later because I am using PostgreSQL and these topics mainly about SQL Server)


4. Permissions

Tahap ini mengatur bagaimana konfigurasi hak akses bagi pengguna basis data. Di bawah Data Owner, terdapat Data User sebagai pengguna geodatabase. Tanggungjawabnya adalah
1. Melihat peta dan data
2. Membuat peta
3. Melakukan analisis
4. membuat dan mengelola data spasial

Data user dibagi dua, pembaca peta (read access) dan editor data (read/write access). Sebagaimana Data Owner, data user dapat mengakses database melalui OS auth atau database auth. 

Kumpulan data user dengan tugas sama dapat digabungkan dalam sebuah Role, sehingga lebih mudah dalam mengatur permissions. Pemasukan dan pengeluaran user ke dalam role melalui protokol "Grant dan "Revoke"

Creating Role di ArcToolbox menggunakan Create Role Tool. (parameter yang diatur antara lain connection, nama role baru atau role eksisting yang mau diedit, Grant or Revoke, nama user yang masuk atau keluar) 

Creating User di ArcToolbox menggunakan Create Database User tool (keikutsertaan dalam role juga dapat diatur disini)

Privileges digunakan untuk mengatur hak akses user terhadap sebuah dataset/feature class. Privileges diatur di right click Dataset>Manage>Privileges. kemudian Add User, lalu set privileges-nya, privileges meliputi hak untuk melakukan SELECT (Read), INSERT (write), UPDATE (write) dan DELETE (write). 

Jika sebuah peta dari SDE Geodatabase dalam sebuah MXD atau Connection file di-share (dalam bentuk Map Packages atau consolidation Folder) maka pasword dan akun akan otomatis tersimpan di dalam MXD tersebut, sehingga orang lain dapat mengakses data tanpa harus mengetahui akun dan password dari data user/owner. Untuk mencegah ini, ketika koneksi dilakukan, kolom save password harus diuncheck, atau koneksi dilakukan menggunakan OS auth. 


5. Performance

Proses penyimpanan, pemanggilan data, editing, manipulasi dan query data dalam ukuran besar akan membebani server. Tahap performance mengatur agar kita bisa mengelola data se efektif dan se efisien mungkin.

Khusus untuk aspek query dan storage, kita dapat mengurangi beban server dengan membuat database view dan query layer. 

Keberadaan database view dan query layer berangkat dari pemahaman bahwa untuk data dengan tabel atribut yang kemungkinan berukuran besar (seperti data sensus) idealnya dipisah antara data spasial dan tabel atribut. Proses join nanti dilakukan melalui pembuatan database view (disimpan di server/database) atau query layer (disimpan di client). Keluaran database view dan query layer sama, yaitu berupa feature class yang terdiri dari data spasial dan atribut (sama ketika kita melakukan join tabel untuk data shapefil/personal/file geodatabase). 

Pembuatan Database View 
1. dari Connected geodatabase, right click>New>View. 
2. Masukkan nama View dan View Definition
3. View Definition merupakan serangkaian SQL syntax untuk memanggil data spasial dan atribut dari berbagai tabel yang diinginkan. Contohnya seperti di bawah ini.


 SELECT VotingPrecincts.OBJECTID,
 VotingPrecincts.PRECINCTID,
 VotingPrecincts.NAME,
 VotingPrecincts.COUNTY,
 VotingPrecincts.Township,
 VotingPrecincts.SHAPE,
 USSenateResults.WinningParty,
 USSenateResults.TotalBallots,
 USSenateResults.Candidate1,
 USSenateResults.Party1,
 USSenateResults.NumVotes1,
 USSenateResults.PercentVote1,
 USSenateResults.Candidate2,
 USSenateResults.Party2,
 USSenateResults.NumVotes2,
 USSenateResults.PercentVote2,
 USSenateResults.Candidate3,
 USSenateResults.Party3,
 USSenateResults.NumVotes3,
 USSenateResults.PercentVote3,
 USSenateResults.Candidate4,
 USSenateResults.Party4,
 USSenateResults.NumVotes4,
 USSenateResults.PercentVote4,
 USSenateResults.Candidate5,
 USSenateResults.Party5,
 USSenateResults.NumVotes5,
 USSenateResults.PercentVote5,
 USSenateResults.Candidate6,
 USSenateResults.Party6,
 USSenateResults.NumVotes6,
 USSenateResults.PercentVote6
FROM VotingPrecincts
LEFT JOIN USSenateResults
ON VotingPrecincts.NAME = USSenateResults.NAME

VotingPrecincts merupakan feature class dari Batas Admin, dan USSenateResults merupakan tabel hasil pemilu.

Database View dapat diakses oleh Baik Data Owner maupun Data User, untuk Data User hanya dapat mengakses atribut yang dimasukkan ke ViewDefinition, Data Owner dapat mengakses seluruh atribut yang di-join di dalam View.

Pembuatan Query Layer
1. Dari ArcMap klik Menu File>Add Data>Add Query Layer.
2. Masukkan nama koneksi, nama query layer yang diinginkan, masukkan SQL Query Statement. Jangan lupa validate agar tidak ada error.
3. Bentuk SQL Statement untuk query layer agak berbeda dengan database view, dimana selain nama field dan nama feature class, harus dimasukkan juga nama database dan nama data owner di dalam statement. Contoh seperti ini

 SELECT test.juki_user.CENSUSBLOCK.OBJECTID,
 test.juki_user.CENSUSBLOCK.STCOFIPS,
 test.juki_user.CENSUSBLOCK.TRACT,
 test.juki_user.CENSUSBLOCK.STFID,
 test.juki_user.CENSUSBLOCK.BLOCK,
 test.juki_user.CENSUSBLOCK.Shape,
 test.juki_user.CENSUSBLOCKSSTATS.TOTPOP,
 test.juki_user.CENSUSBLOCKSSTATS.POPDENS
FROM test.juki_user.CENSUSBLOCK
LEFT JOIN test.juki_user.CENSUSBLOCKSSTATS
ON test.juki_user.CENSUSBLOCK.STFID = test.juki_user.CENSUSBLOCKSSTATS.STFID

"test" adalah nama database, "juki_owner" adalah nama data owner, CenSUSBLOCK adalah data spasial blok sensus, dan CENSUSBLOCKSSTATS adalah tabel atribut hasil sensus.

Selain View, Indexing dan statistics scheduled calculation juga diperlukan agar dalam proses query lebih optimal. Indexing dilakukan pada field yang sering digunakan sebagai dasar untuk melakukan query.

Tahapan Indexing.dan Update Statistics
1. Dari Layer Properties>Indexes>Add
2. Beri nama index dan masukkan field yang akan menjadi index. Klik OK
3. Proses Update index dapat dilakukan menggunakan Rebuild Indexes Tool di ArcToolbox
4. Update Statistics dapat dilakukan di RightClick Dataset>Analyze.

Proses Rebuild Index dan Update Statistics dapat diatur berkala (Scheduled) menggunakan Phyton Script dan Fitur Scheduled Tasks Windows.

Script Phyton-nya seperti di bawah ini dan dapat dijalankan secara berkala (via Phyton window ArcGIS, PhytonWIN, atau Phyon IDLE).

# Name: GDBMaintenance.py
# Description: Rebuilds indexes and statistics 
# on geodatabase feature classes
# using an existing .sde file.

# Author: Esri

# Import system modules
import arcpy, os
import sys, traceback

# set the workspace environment
arcpy.env.workspace = r"C:\Users\Lenovo\AppData\Roaming\Esri\Desktop10.3\ArcCatalog\Postgres_SuperUser.sde"

#Gather all the FeatureClasses and Tables from the Workspace
datasets = arcpy.ListTables() + arcpy.ListFeatureClasses()

#Save geodatabase path to use for concatonating feature dataset names
path = arcpy.env.workspace

#Determine if any were found
for fd in arcpy.arcpy.ListDatasets("","Feature"):
    arcpy.env.workspace = path + "\\" + fd
    #Gather the FeatureClasses from the Current Dataset
    datasets += arcpy.ListFeatureClasses()

arcpy.env.workspace = path

#Rebuild and analyze all datasets
arcpy.RebuildIndexes_management(arcpy.env.workspace,"NO_SYSTEM",datasets,"ALL")
arcpy.AnalyzeDatasets_management(arcpy.env.workspace,"NO_SYSTEM",datasets,"ANALYZE_BASE","ANALYZE_DELTA","ANALYZE_ARCHIVE") 

print "Processing complete"

Untuk Mode Scheduled langkahnya sebagai berikut
1. Run Scheduled Task Windows
2. Menu Action>Create Basic Task
3. Beri nama Task, klik Next
4. Pilih Task misalnya Weekly, kemudian masukkan tanggal mulai dan recur time. klik Next
5. Pilih Start A Program , Next, Browse ke Phyton Script diatas. Jangan tambahkan argument lain. Finish.


5. Management

Ketika geodabase mulai dimanfaatkan dan user mulai mengisi dan mengelola data, adalah penting untuk mengatur agar tidak terjadi konflik ketika data diedit secara bersamaan. Untuk itu ada fitur "Locks" . Locks terjadi untuk SDE geodatabase yang disetting agar bisa digunakan dalam kondisi "Unversioned". Lock ada dua jenis, Feature Lock dan Schema Lock. Feature lock terjadi ketika ada dua user mencoba meng-edit feature yang sama pada waktu yang sama. Feature Lock pada user kedua akan tetap berlangsung sampai user pertama melakukan "commit" (save edit atau stop editing). Schema Lock terjadi ketika seorang user ingin mengubah struktur tabel (seperti menambah field) dari sebuah dataset yang sedang diedit user lain, dimana user kedua akan mendapat error message yang menyebut bahwa data sedang diedit.

Menghapus lock secara paksa hanya dapat dilakukan oleh Geodatabase administrator (akun sde). Caranya:
1. Dari Nama Koneksi, right click>Administration>Administer Geodatabase
2. View Connections Tab
3. View Locks Tab
4. Identifikasi user yang melakukan locking, kemudian klik kanan nama user tersebut>Disconnect




Note :
Mohon maaf kalau bahasanya mungkin membingungkan, notes ini saya tujukan yang utama untuk saya sendiri sebagai pengingat apa yang sudah saya pelajari. tapi ilmu tidak akan bermanfaat kalau tidak dibagi ke orang lain, oleh karena itu saya share disini. Andaikan ada yang berminat mempelajari dan ada bingung - bingung, silahkan komen, saya akan respon secepatnya.