1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

*Disclaimer: ini semua dilihat dari kacamata Aplikasi (Developer/Architect), dan bukan dari kacamata Data (Database Administrator).

Di tempat saya consulting, lagi ada perdebatan seru nih: database di customer sudah mencapai lebih dari 1 Terabytes, dan performance aplikasi menjadi lambat. Solusi temporary adalah archiving old data tiap kali database mencapai lebih dari 1 Terabytes, dan voila, aplikasi kembali menjadi cepat.

Dan ini yg terjadi: Microsoft “nyalahin” ISV karena dibilang aplikasinya nggak bener bikinnya. Sebaliknya, ISV “nyalahin” SQL Server karena nggak bisa scalable untuk data diatas 1 Terabytes… nah loh, berantem aja tuh terus-terusan, not good in the long-term.

Untungnya sebagai konsultan, kita tidak perlu membela satu pihak. Cukup menanalisa, dan memberikan opini :)

Berikut konversasi saya (setelah di-edit agar lebih enak dibaca di blog dan menghapus reference ke pihak-pihak yg tak berdosa):

Pak, Masalah Terbesar ada di Hard Disk

Mohon lihat diagram berikut:

dbshards-graph

Rt = Response Time
Tx = Number of Transactions
GBs = Database Size

So grafik ini cukup menjelaskan kalo semakin besar database size dan semakin banyak jumlah transaksi, mau nggak mau response time pasti akan degradasi.

Prosesor semakin cepat.
Memory pun semakin besar, cepat, dan murah (DDR2, DDR3).
Network semakin cepat (Gigabit, Fiber).
Hard disk semakin besar, murah… tapi tetap aja 7,200 rotasi per menit (rpm) atau 10,000 rpm atau 15,000 rpm.

Intinya: Hard Disk adalah Elemen Terlambat dalam sebuah Sistem Komputer.

 

Distributed Hash Table (DHT)

Programmer suka sekali dengan hashtable, karena untuk mendapatkan objek Order dengan Id 001, cukup menggunakan kode:

Order o = OrderRepository.GetById(001);
// implementasi OrderRepository
public Order GetById (int id) {
  return OrderHashtable[id];
}

Tapi pada kenyataanya, implementasi akan menjadi seperti diagram ini:

01

Problem muncul jika App Cache dan SQL Cache selalu “Cache Miss” alias persentase data yg di-request selalu tidak ada di Cache.

Andaikan database saya 8 GB, maka dengan diagram diatas, best-case nya selalu ada 50% Cache Miss, karena Total RAM Cache adalah 4 GB (2GB dari App dan 2 GB dari SQL). Performance akan mulai kerasa drop terlebih jika aplikasi membutuhkan banyak table joins.

Distributed Hash Table adalah konsep menggunakan memory idle di beberapa PC untuk menyimpan cache, dan menarik isi cache tersebut via network, dikarenakan kombinasi Gigabit Ethernet + Memory sekarang lebih cepat daripada hard disk memutar.

Katakanlah di kantor customer terdapat 8 PC yg kebanyakan digunakan hanya untuk Microsoft Office dan Internet Explorer saja. Maka PC-PC ini bisa dijadikan cluster untuk distributed hash table:

02

Dengan database size 8 GB tadi, sekarang Cache Hit (lawannya cache miss) saya bisa naik menjadi 99% . Ketika semua pegawai sudah pulang kantor, barulah data yg ada di DHT cluster di-synchron dengan SQL Server… jadinya hard disk SQL Server berputar untuk menyimpan writes ketika tidak ada users, dan hard disk SQL Server tidak pernah berputar untuk reads karena semua 8 GB data ada di DHT.

Nah untuk implementasi Distributed Hash Table ini, ada beberapa produk:

  • Memcached: popular (digunakan Facebook, Flickr, dsb.) dan opensource.
     
  • NMemcached: .NET-based Memcached buatan si Ayende (nHibernate guy).
     
  • Cacheman: .NET-based Memcached buatan pegawai Microsoft (tapi bukan official MS product).
     
  • SharedCache: .NET-based Memcached yg sepertinya powerful.
     
  • Project Velocity: Microsoft Official Distributed Hash Table dan jawaban untuk Memcached (tapi masih beta bo’).

 

Database Sharding

Distributed Hash Table lumayan untuk bikin aplikasi scalable… selama Anda selalu bisa menambahkan mesin ke dalam Cache Cluster ketika data semakin bertambah..

Tapi jika tidak, maka masalah selanjutnya adalah membuat Database lebih Scalable… sebelum ada miskomunikasi, maksud saya Scalable disini adalah Performance akan tetap Stabil ketika Volume Data Bertambah. Jadi bukan high-availability (dimana saya pengen data selalu ada dan up 99%).

1) Pisahkan Reads dari Writes (Master-Slave)

Tembak Master Database ketika melakukan Insert, Update, Delete (Writes).

Replicate Master Database ke Slave.

Tembak Slave Database ketika melakukan Select (Reads).

03

 

2) Pisahkan Table (Vertical Partitioning)

Jika setelah implementasi Master-Slave ternyata performance masih dirasa kurang, maka pemisahan Table bisa dilakukan:

04

 

3) Pisahkan Rows (Sharding)

Jika setelah Vertical Partitioning juga masih dirasa lambat, maka opsi terakhir adalah Sharding:

05

Opsi 1) dan 2) bisa menggunakan SQL Server Replication. Opsi Sharding ini bukan Replication, karena Shard 1 datanya memang berbeda dengan Shard 2.

Sharding pada intinya adalah memecah 1 Database besar menjadi beberapa database kecil. Argumen untuk sharding adalah karena database yg kecil akan memberikan performance yg sangat cepat.

Maksud diagram diatas adalah penggunaan CustomerId dan Sistem Modulo 5 untuk menentukan di Shard mana data Customers dan Orders akan ditaruh.

Contoh: CustomerId = 1001  --> 1001 modulo 5 = 1 , maka data Customer ini akan ditaruh di database shard #2.

Codingnya pun harus ganti total, karena dibutuhkan argumen CustomerId untuk menentukan Shard-nya:

Customer c = CustomerRepository.GetById(1001);
 
// implementasi CustomerRepository
public Customer GetById (int cid) {
  // Check Memcached
  var memcache = new Memcache();
  var customer = memcache[cid];
  if (customer == null) {
    // Cache miss, harus nembak database
    var shardId = cid % 5;
    IDbConnection conn = DbFactory.CreateConnection(shardId);
    var expression = Select.Name.Address.Orders();
    var filtered = expression.Filter(Id.Equals(cid));
    Customer result = conn.Execute(filtered);
    
    // Save ke Memcached
    memcache[cid] = result;
    return result;
  }
}

 

Siapa yg menggunakan Sharding?

Ebay menggunakan sharding, berikut kutipannya:

“…we split (or "shard") the data horizontally along its primary access path. User data, for example, is currently divided over 20 hosts, with each host containing 1/20 of the users. As our numbers of users grow, and as the data we store for each user grows, we add more hosts, and subdivide the users further. Again, we use the same approach for items, for purchases, for accounts, etc.”

Digg.com menggunakan sharding, berikut kutipannya:

“Digg only recently began sharding. While sharding is helping Digg.com achieve much faster performance overall, breaking a database into several smaller ones increases complexity, Ellis said. That can mean more work for developers and database administrators, because of the inability to use common SQL commands such as joining tables. "Developers don’t like this crazy stuff. That can create pushback," he said.”

Flickr, Youtube juga menggunakan sharding sebagai bagian dari architecture-nya.

Packaged Solution:

Sharding ini mau nggak mau harus manual di .NET dan SQL Server. Berikut beberapa produk yg akan sangat membantu proses sharding (yg bisa dicoba baru opensource, solusi Microsoft masih dalam tahap research):

  • HBase: HBase's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Try it if your plans for a data store run to big.
     
  • Hypertable: Modeled after Google's well known Bigtable project, Hypertable is designed to manage the storage and processing of information on a large cluster of commodity servers, providing resilience to machine and component failures. Hypertable seeks to set the open source standard for highly available, petabyte scale, database systems.
     
  • Microsoft Research Boxwood Project: The goal of this project is to explore the utility of data structures or abstractions as storage infrastructure. Storage infrastructure that allows incremental expansion has obvious economic benefits.

 

Pak, Infrastructure Layer-nya harus diubah

Tadi bapak bertanya apakah scalability dapat diubah tanpa mengubah aplikasi? Jawabannya bisa pak, selama kode Domain Layer (Application Core) tidak berisi kode-kode SQL seperti “SELECT * FROM Customers Where CustomerId = ‘1001’ “.

Kode-kode infrastructure seperti caching, database, file access, network calls, dsb. harus berada di Infrastructure Layer. Dari kode saya diatas, kode-kode Aplikasi Core menggunakan Repository untuk membuat seolah-olah semua objek diakses dari memory.

Lihat diagram berikut pak:

01

Dikarenakan kode database berada di Infrastructure Layer paling luar, maka layer dalam (Application Core) tidak perlu diubah. Tapi jika aplikasi bapak tidak mengenal Infrastructure Layer maka mungkin aplikasi bapak harus di-design ulang :)

--- end of conversation ---

 

Conclusion

Jadi gimana solusinya? Well, untuk sementara temporary solution masih dipakai (archive tiap 1 Terabytes) sambil saya membantu tim developers ISV ini me-refactor aplikasinya menjadi seperti Onion Architecture diatas. Saya juga akan meriset apakah kita akan menggunakan Memcached atau Microsoft Velocity untuk Distributed Hash Table.

Dan karena sang ISV tidak memiliki 1 Terabytes dummy data, sepertinya harus beberapa kali berkunjung ke customer site untuk mengetes improvement setelah menggunakan Distributed Hash Table, dan juga setelah Database Sharding.

Belum lagi masalah backup & restore jika Sharding terpilih menjadi opsi scalability.

Sepertinya kontrak consulting saya akan diperpanjang 2 tahun ke depan :)

Share this post: | | | |
Published Friday, April 03, 2009 8:28 PM by zeddy

Comments

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 6:27 AM by ridi

Sama Bang Z, beberapa minggu yang lalu kita ngalamin hal yang sama tetapi kliennya mobile..kalau datanya on demand bikin depedensi..dengan DB tetapi load caching di mobile menggunakan Sql mobile... setelah diprofiling performancenya jatuh.. Sync framework solve this... secara angka di VS udah tapi belum nyoba di real device :D

ini kontent di bookmark dulu.. suka bagian fakta Google dan Ebay

Keep sharing Bro...

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 7:33 AM by kiki

urun rembuk..

performance problem sebagian besar terjadi karena kesalahan desain, 25% (software desain) dan 25% (Db Design) sisanya baru infra struktur H/w dan Network.

problem terbesar adalah kita tidak pernah melakukan capacity planning terhadap aplikasi yang kita bikin.

dan unsur terbasar setelah leak of capacity planning adalah kesalah dalam mendesin database (termasuk penentian ER dan Indexing antar table).

solusi yang di pilih biasanya adalah solusi termudah dan yang tanpa resiko yaitu upgrade hardware. meski ini engak bisa solve masalah utamanya

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 10:01 AM by zeddy

@ridi: Sync Framework emang bagus untuk aplikasi SmartClient, dimana di client-nya bisa di-instal .NET 3.5 SP1 + SQL Server CE. Juga ini yg membuat SmartClient bisa bekerja secara offline, dan sync ketika online.

Untuk kasus diatas, dimana aplikasinya adalah via web browser, Caching harus di App Server, dan App Server ini yg harus ngomong ke Cache Cluster (Distributed Hash Table).

Bro, sebagai akademis ente harus baca 2 paper ini:

- Amazon Dynamo (www.allthingsdistributed.com/.../amazons_dynamo.html): by Dr. Vogels, CTO Amazon.com

- Google BigTable (labs.google.com/.../bigtable.html): by Chang et al, Google Researcher.

 

@kiki: benar om, si customer yg punya data lebih dari 1 TB tiap bbrp bulan ini cukup berduit untuk beli hardware secanggih apa pun.

Cuman setelah beli hardware canggih, terus 1 tahun kemudian masalah yg sama muncul, masa solusinya beli hardware yg canggih lagi? Makanya si customer nanya "Ini salahnya di aplikasi ente atau di MS SQL Server?"

Thanks atas insights from SQL expert-nya om :)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 11:07 AM by Risman Adnan Mattotorang

Very good posting Z!!!

This is also a good reading:

.99% available ASP.NET and SQL Server SaaS Production Architecture

www.codeproject.com/.../ProdArch.aspx

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 12:08 PM by irwansyah

Hmm...kok Oracle tidak pernah ada keluhan ya mau datanya sebesar apapun?

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 2:44 PM by narue

nah nah nah.. nongol trus kasus ginian. gw asumsikan server pake MS berhubung SQL Server. Saya pribadi tidak mengerti gimana arsitektur dari kernel Server Family Windows dan SQLnya. Walaupun ada banyak buku yang menjelaskannya, tapi kita tidak boleh mengiya-iyakan semua yang dibilang MS soal arsitektur server dan SQLnya.

Karena sudah dari jaman dulu kita tahu bahwa Server Family Windows tidak pernah memaksimalkan Xeon Family Processor Intel. Saya sendiri merasa masalah anda ada pada bagian dalam Windows dan SQL yang tidak open source, yang pada akhirnya semua orang selalu menolak siapa kambing hitamnya.

Open source ga selalu buruk kok, open berarti siapa saja bisa melihat kodenya dan belum tentu siapa saja berhak menggunakannya. Jangan berpikir buruk ya soal Open Source.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 2:58 PM by zeddy

@irwansyah: seperti ane bilang diawal posting, masalahnya dilihat dari sisi aplikasi, bukan database.

anyway i heard that oracle's partitioning is excellent, whereas sql server di versi 2008 baru di-fix issue yg 1-thread per partition dalam query yg involve multi-partitions (see sqlblog.com/.../partitioning-enhancements-in-sql-server-2008.aspx)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 3:08 PM by zeddy

@josef: lah siapa yg berpikir buruk soal open source bung? hehehe, mentang2 gw ex-microsoft employee jadi asumsi ente gw anti-opensource?

gw pake opensource (ubuntu, apache, subversion, mysql) buat sistem continuous integration koq, lihat di posting gw yg lain: geeks.netindonesia.net/.../empower-your-employees-the-armanovus-infrastructure.aspx

*geleng2 krn dituduh ga ngerti opensource... kekeke nih orang kayak kagak tahu aja gw kuliah maenannya linux dan laptop gw mac os x biar bisa ada terminal bash-nya :P

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 4:27 PM by irwansyah

Heheheh, gw kan cuma mencoba mencari tahu akar masalahnya. Karena solusi yang ente usulkan itukan solusi di DB side buka app side. Nah, yang gw lihat selama ini M$ berusaha lepas tangan dengan selalu mencoba menggiring massa ke arah aplikasi bukan ke arah peningkatan performance di DB server mereka. Itulah kenapa gw compare dengan Oracle karena dengan data segitu sepertinya hal kecil tuh untuk Oracle ;)

# Database Server Yang Ga Bikin Pusing

Saturday, April 04, 2009 5:28 PM by The Pragmatic Programmer

Membaca postingan di sini . Saya jadi tergelitik untuk mencari tahu apakah ada DB server yang kita tidak

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 6:23 PM by Risman Adnan

@Irwansyah, apakah kamu udah pernah configure oracle to handle terrabytes data? Scalable design terlepas dari apapun database nya. Gak ada database yang sanggup handle huge data tanpa good design for scalability. Come on, back to the fact bhw the slowest part is your hard disk.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 7:20 PM by zeddy

@irwansyah: chu, pendapat ente sama dengan pendapat salah satu bos-nya ISV ini dan juga oracle evangelist :)

masalahnya aplikasi tidak di-design dgn "persistent-ignorant" dari awal, lebih ke "sql-server-minded".

jadi pun kalo opsi migrasi oracle dipilih, sisi aplikasi tetap harus di-test ulang, dan pastinya dirombak dgn persistent-ignorant agar di masa depan jika ada dbase yg lebih canggih (google db misal), tinggal bikin kode infrastructure layer yg baru.

jadi aplikasi tetap harus di-refactor agar tidak menjadi legacy app... apalagi masih di-coding dgn .NET 1.0, so many boxing performance hits :)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 7:56 PM by irwansyah

@Risman: Sebagai developer tentu saja saya akan berusaha mencari cara lain untuk menghindari jangan sampai kena masalah seperti ini lagi, bukan begitu? Jadi inti dari pertanyaan ini tuh bukan untuk menjatuhkan/mengangkat suatu produk. Namun dari cerita yang berkembang saat ini kenyataannya memang banyak yang mengatakan bahwa Oracle tidak pernah mengalami masalah seperti ini. Nah, wajar dong sebagai developer mencari tahu? ;)

Dan kalau ternyata jawabannya adalah benar kalau pakai Oracle tidak akan ada masalah ini, nah wajar juga dong sebagai pemakai setia SQL Server menuntut supaya M$ bisa memberikan kemampuan yang sama di SQL Server? ;)

Bukannya begitu? Ato sudut pandang saya salah nih? Mohon koreksinya! CMIIW.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 7:57 PM by irwansyah

@zeddy: Berarti itu emang udah rezeki ente :D

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 7:58 PM by irwansyah

@zeddy: Kelupaan. Kalau itu aplikasi sudah di-refactor, kira-kira bakal ngasih saran DB server apa ke client? Dan alasannya apa? ;)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Saturday, April 04, 2009 8:27 PM by Risman Adnan Mattotorang

@Irwansyah, understood and acceptable. Mitos bahwa Oracle bisa handle Terrabytes without any configuration/design itu salah, kecuali ada yang prove itu benar ya :).

Coba liat benchmark berikut untuk OLTP:

www.tpc.org/.../tpcc_results.asp

Semoga bisa membantu.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 6:29 AM by zeddy

@irwansyah: kalo udah persistent-ignorant, harusnya kita ngikutin customer. Customer udah punya Oracle, yo wis ga harus beli SQL... customer udah punya SQL Server, yo wis ga harus beli Oracle. Customer maunya pake MySQL, yo wis kita ikutin.. jadi kita ga nyusahin customer harusnya ntar :)

tapi gw tertarik dgn teknologi In-Memory Database.

Oracle telah meng-akuisisi TimesTen In-Memory Dbase (www.oracle.com/.../timesten.html), dulunya TimesTen buatan mantan employee HP (bukan agus k)

MS rumornya sih akhir 2009 ini akan meng-announce in-memory database nya (lagi hunting perusahaan yg bisa di-akuisisi kali..)

gw juga tertarik dgn model grid, dimana server ga harus high-end, bisa average specs tapi dijadikan cluster untuk scalability (datanya dipecah ke multiple server) bukan high-availability (datanya di-replicate ke multiple server). nah untuk yg ini produk komersilnya baru oracle 11g kayaknya yg bagus.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 7:01 AM by irwansyah

@Zeddy: Jawaban ente di paragraf pertama itu diplomatis sekali. :P

Namun, sekarang client entekan udah ada problem nih. Misalkan ente udah selesai tuh refactoring tentunya client akan minta saran bagaimana caranya supaya kejadian ini tidak terulang lagi? Nah, kira-kira ente masih berani atau enggak nih untuk menyarankan menggunakan DB server yagn sekarang atau ente sarankan untuk mengganti dengan DB server lain mungkin dengan DB server yang termaktud di paragraf-paragraf berikutnya dari jawaban ente di atas? ;)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 7:06 AM by irwansyah

@Risman: Dari web site itu juara I & II DB2 juara 3 Oracle. Lalu kemanakah SQL Server?

Ini linknya: www.tpc.org/.../tpcc_perf_results.asp

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 8:07 AM by zeddy

@irwansyah: hehe, business doesn't work like technology does... ada intrik2 politiknya bos.

jika sebuah isv adalah vendor x certified partner, namun merekomendasikan vendor y competitor product, then drama seperti di acara2 gosip tv akan bermulai.. isu pihak ketiga, isu perceraian, isu kurang kasih sayang, dsb..

urusan ngomong ke customer langsung, gw serahkan ke sang bos-nya isv deh :)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 12:39 PM by Risman Adnan Mattotorang

@Irwansyah, iya betul, IBM DB2 nomor 1 untuk OLTP (kakak tertua). Oracle bisa #2, with partitioning (kakak kedua). Hasil benchmark untuk SQL 2008 (adik terakhir) belum di publish disitu baru SQL 2005 kalau gak salah.  Umur mencerminkan maturity heheheh.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 12:57 PM by irwansyah

@Risman: Berarti dengan kata lain SQL Server itu teknologi yang belum mature masih banyak masalahnya dan tidak bagus untuk OLTP dengan volume transaksi yang besar?

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 1:53 PM by Risman Adnan Mattotorang

@Irwansyah, itu namanya interpretasi bebas. Kamu bisa liat juga, dalam kondisi tertentu (OS & HW), DB2 dan Oracle bisa lebih kecil tpmC nya di banding SQL atau database lain. Ini juga belum termasuk pengaruh quality of RDBMS design dan application architecture. Benchmark seperti ini valid untuk scope yang sudah didefine, tapi tidak bisa digeneralisir.

Sama halnya dengan maturity manusia, umur hanya mencerminkan experiences, bukan nilai absolute. I'm older than you guys, tapi itu bukan jaminan I'm better than you.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 3:26 PM by irwansyah

Perdebatan sampe di sini aja...Karena sebagai yang lebih muda harus menghormati yang lebih tua ;)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Sunday, April 05, 2009 5:00 PM by narue

Ohh sorry, ga maksud nuduh situ anti-opensource. Gara-gara ane lebih sering diforum sih, jadinya kasi postingan seperti ngasi bacaan ke semua orang.

Cheers. =)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Monday, April 06, 2009 10:53 AM by norman

Z, on Gemini in Kilimanjaro, the "In Memory" would be on BI, not OLTP. It's because BI would not need the volatile memory. It only reads, not writes.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Monday, April 06, 2009 1:13 PM by neonerdy

ngomong2, kalo Google pake DBMS nya apa y?

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Tuesday, April 07, 2009 9:16 PM by Kasim Wirama

Data archiving dirasa perlu untuk scenario data lama tidak begitu sering diakses, biasanya data lama diletakkan di resource yang lebih rendah capabilitynya. Dari situ baru timbul macam2 cara berdasarkan teknologi yang terkini dari SQL Server 2005/2008 seperti native partitioning dengan switching partition.

Statement dari Sdr. Zeddy mengenai skalability ("Performance akan tetap Stabil ketika Volume Data Bertambah") mungkin sedikit berbeda dengan yang saya ketahui dari buku "SQL Server 2005 Query Tuning and Optimization". Skalability menurut Kalen Delaney dkk adalah performance akan proporsional ketika penambahan database load sebanding dengan penambahan resource yang menghandle load tersebut. Hal lain yang mungkin perlu dilihat adalah desain database, penulisan query dan juga apakah query tersebut menggunakan index yang sudah ada. Syukur-syukur querynya bisa dioptimize (refactoring query) tanpa perlu merubah struktur index atau menambah index.

Saya baca sampai dengan skalabilitas, belum go through sampai selesai. Pendapat ini berdasarkan pengalaman saya dari sisi database admin/database developer. If I can get opportunity for this kind of problem, it will enhance my existing understanding. :) But thanks atas sharingnya.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Tuesday, April 07, 2009 10:29 PM by hendraep

Agak bingung nih.

Setahu gw sih kalo buat proses INSERT, UPDATE, ama DELETE tuh tergantung gimana cara kita membuat design table-nya. Kalau mau optimize, yah jangan prnh proses INSERT, UPDATE, ama DELETE tuh mengubah urutan data secara physical, butuh cost lagi buat sort tuh data. Nah ini kan tergantung gimana cara kita menentukan primary key ama index-nya.

Kalau buat query, ini mah lebih simple lagi. DB pasti lookup data ke cache dulu, kalo g ada baru cari ke physical disk. Kalau data yang di-query-nya besar, masa nyari ke cache. Mau pasang memory berapa gede? Tetap aja bottleneck di disk, pada saat baca data. Yang bener tuh bikin cara query yang efektif.

Opsi Sharding tuh kan sebetulnya kalo dilihat dari skala kecil mirip dengan partition. Tapi tetap bottleneck-nya di disk. DB dan table bisa dipisah, tapi nggak akan efeknya kalo tetap ditaruh di disk yang sama. Kalo banya process akses barengan, biarpun di sharding atau di partition, kalo disknya sama, tetap aja lemot. Lah ... head disknya tetap 1 kan

Just my opinion

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Thursday, April 09, 2009 6:52 PM by zeddy

@hendra: bacanya pelan2 om... :)

memisah database Reads (Select) dari Writes (I/U/Delete) itu dilakukan buat Aplikasi yg sangat heavy Read-Only, which is kebanyakan aplikasi web kayak YouTube, Flickr, dll.

tapi database Reads dan Writes ini urutan Rows nya sama, nggak ada yg beda... wong mereka replikasi dari Master koq... cuman kalo ada 1 juta orang mau Read dan 200 orang mau write, 500 ribu bisa ke Slave #1, 500 ribu ke Slave #2, 200 orang ke Master. Ibaratnya Load-Balancing lah...

penjelasan yg lebih mendetail silakan baca sendiri disini deh: en.netlog.com/.../blogid=3071854

ttq query kebesaran, lah ya emang di cache dulu mas.. hard disk juga punya cache, semua physical device punya cache...

Dalam kasus consulting saya ini, ada mesin dgn 16 GB RAM dan lebih dari 1 TB data di SAN, dan aplikasi tetap lambat... data yg di-query itu nggak gede koq mas, nggak pernah minta 100 juta rows sekaligus... kan developernya nggak bego2 amat, dia implement paging dan query-nya selalu di-limit rows yg di-expect.

Kasusnya adalah ada bbrp tabel yg isinya ratusan jutaan rows, dan ini yg bikin query lambat.

Dan terakhir bos yg namanya Sharding emang database bikin lebih kecil dan ditaruh di mesin yg terpisah. Nggak ada Sharding dalam 1 mesin... justru maksud dari Sharding itu ketika load bertambah, tinggal nambah mesin... jadi bisa scale horizontally.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Thursday, April 09, 2009 7:00 PM by zeddy

@kasim: hey you're right... yg benar adalah proportional... maksud ane stabil bukan tetap sama, tapi stabil dalam arti "nggak kerasa lambat"

buku ini juga bagus mas: SQL Performance Tuning

www.amazon.com/.../0201791692

Buku itu nggak specific SQL Server, dia berlandaskan The Big Eight (DB2, Informix, Oracle, SQL Server, Ingre, Interbase, MySQL, Sybase).

Dibuku itu ada bagian Query-Tuning juga yg menarik, dimana dia jelasin Performance Gain dari menata ulang query yg biasa dibuat beginner-intermediate developer.

Gw dah recommend buku ini ke developer ISV ini...mudah2an dari sisi aplikasi mereka akan analyze query2 mereka dan melakukan optimasi dimana perlu..

Mau ikutan beresin database multi-terabytes ini mas? hehe, kalo dari meeting kemarin sih kayaknya akan assign 1 senior developer untuk mempelajari ini... maybe ntar kalo mereka open for more external consultants, akan gw contact2 :)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Friday, April 10, 2009 3:48 PM by ronaldwidha

wah sadis. belum lama ini Ayende jg ngepos ttg DHT-nya dia. Baru ngerti setelah ngebaca posting anda. Sangat handal.

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Friday, April 10, 2009 4:28 PM by ronaldwidha

> Dan terakhir bos yg namanya Sharding emang database bikin lebih kecil dan ditaruh di mesin yg terpisah. Nggak ada Sharding dalam 1 mesin... justru maksud dari Sharding itu ketika load bertambah, tinggal nambah mesin... jadi bisa scale horizontally.

kalo contoh coding sharding elo di atas kan pake id % n. Where n is the number of shards. Kalo mo tambah mesin, harus reconstruct shardingnya semua donk yah? down time kah berarti?

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Thursday, April 23, 2009 10:36 PM by opelkinkong

Bingung :??

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Tuesday, May 05, 2009 10:40 AM by Oki Purwana

Good info bro :D Keep posting this valuable stuff, gw jadi kepikiran mo POC teknik2 di atas di salah satu klien :)

# re: 1 Terabytes Database, Aplikasi Lambat, Salah Siapa dan Gimana Solusinya?

Thursday, January 07, 2010 2:26 PM by chodet

bos gw punya masalah persis seperti apa yang lo tolis di sini, gw menggunakan sql server, apa aja yg harus gw lakukan supaya saya bisa membagi beban server dengan menambah server2 kecil. pliz infonya tx

Powered by Community Server (Commercial Edition), by Telligent Systems