Rabu, 16 Maret 2011

Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase comparison

While SQL databases are insanely useful tools, their tyranny of ~15 years is coming to an end. And it was just time: I can't even count the things that were forced into relational databases, but never really fitted them.

But the differences between "NoSQL" databases are much bigger than it ever was between one SQL database and another. This means that it is a bigger responsibility on software architects to choose the appropriate one for a project right at the beginning.

In this light, here is a comparison of Cassandra, Mongodb, CouchDB, Redis, Riak and HBase:

CouchDB

  • Written in: Erlang
  • Main point: DB consistency, ease of use
  • License: Apache
  • Protocol: HTTP/REST
  • Bi-directional (!) replication,
  • continuous or ad-hoc,
  • with conflict detection,
  • thus, master-master replication. (!)
  • MVCC - write operations do not block reads
  • Previous versions of documents are available
  • Crash-only (reliable) design
  • Needs compacting from time to time
  • Views: embedded map/reduce
  • Formatting views: lists & shows
  • Server-side document validation possible
  • Authentication possible
  • Real-time updates via _changes (!)
  • Attachment handling
  • thus, CouchApps (standalone js apps)
  • jQuery library included

Best used: For accumulating, occasionally changing data, on which pre-defined queries are to be run. Places where versioning is important.

For example: CRM, CMS systems. Master-master replication is an especially interesting feature, allowing easy multi-site deployments.

Redis

  • Written in: C/C++
  • Main point: Blazing fast
  • License: BSD
  • Protocol: Telnet-like
  • Disk-backed in-memory database,
  • but since 2.0, it can swap to disk.
  • Master-slave replication
  • Simple keys and values,
  • but complex operations like ZREVRANGEBYSCORE
  • INCR & co (good for rate limiting or statistics)
  • Has sets (also union/diff/inter)
  • Has lists (also a queue; blocking pop)
  • Has hashes (objects of multiple fields)
  • Of all these databases, only Redis does transactions (!)
  • Values can be set to expire (as in a cache)
  • Sorted sets (high score table, good for range queries)
  • Pub/Sub and WATCH on data changes (!)

Best used: For rapidly changing data with a foreseeable database size (should fit mostly in memory).

For example: Stock prices. Analytics. Real-time data collection. Real-time communication.

MongoDB

  • Written in: C++
  • Main point: Retains some friendly properties of SQL. (Query, index)
  • License: AGPL (Drivers: Apache)
  • Protocol: Custom, binary (BSON)
  • Master/slave replication
  • Queries are javascript expressions
  • Run arbitrary javascript functions server-side
  • Better update-in-place than CouchDB
  • Sharding built-in
  • Uses memory mapped files for data storage
  • Performance over features
  • After crash, it needs to repair tables

Best used: If you need dynamic queries. If you prefer to define indexes, not map/reduce functions. If you need good performance on a big DB. If you wanted CouchDB, but your data changes too much, filling up disks.

For example: For all things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back.

Cassandra

  • Written in: Java
  • Main point: Best of BigTable and Dynamo
  • License: Apache
  • Protocol: Custom, binary (Thrift)
  • Tunable trade-offs for distribution and replication (N, R, W)
  • Querying by column, range of keys
  • BigTable-like features: columns, column families
  • Writes are much faster than reads (!)
  • Map/reduce possible with Apache Hadoop
  • I admit being a bit biased against it, because of the bloat and complexity it has partly because of Java (configuration, seeing exceptions, etc)

Best used: If you're in love with BigTable. :) When you write more than you read (logging). If every component of the system must be in Java. ("No one gets fired for choosing Apache's stuff.")

For example: Banking, financial industry

Riak

  • Written in: Erlang & C, some Javascript
  • Main point: Fault tolerance
  • License: Apache
  • Protocol: HTTP/REST
  • Tunable trade-offs for distribution and replication (N, R, W)
  • Pre- and post-commit hooks,
  • for validation and security.
  • Built-in full-text search
  • Map/reduce in javascript or Erlang
  • Comes in "open source" and "enterprise" editions

Best used: If you want something Cassandra-like (Dynamo-like), but no way you're gonna deal with the bloat and complexity. If you need very good single-site scalability, availability and fault-tolerance, but you're ready to pay for multi-site replication.

For example: Point-of-sales data collection. Factory control systems. Places where even seconds of downtime hurt.

HBase

(With the help of ghshephard)

  • Written in: Java
  • Main point: Billions of rows X millions of columns
  • License: Apache
  • Protocol: HTTP/REST (also Thrift)
  • Modeled after BigTable
  • Map/reduce with Hadoop
  • Query predicate push down via server side scan and get filters
  • Optimizations for real time queries
  • A high performance Thrift gateway
  • HTTP supports XML, Protobuf, and binary
  • Cascading, hive, and pig source and sink modules
  • Jruby-based (JIRB) shell
  • No single point of failure
  • Rolling restart for configuration changes and minor upgrades
  • Random access performance is like MySQL

Best used: Use it when you need random, realtime read/write access to your Big Data.

For example: Facebook Messaging Database (more general example coming soon)

Of course, all systems have much more features than what's listed here. I only wanted to list the key points that I base my decisions on. Also, development of all are very fast, so things are bound to change. I'll do my best to keep this list updated.

-- Kristof

Pengalaman Seorang Calon Programmer

Right before I graduated college, I had an interview with Microsoft. The interviewer presented a hypothetical scenario that I will never forget. She said “I would like for you to design me a kitchen.” At the time, I didn’t quite see the relation to software development. Why didn’t she ask me about XML, Java, Unit Testing, and Design Patterns? So I I just started in… “Do you want a counter-island?, Do you want track lighting? Do you want steel or black appliances? What kind of flooring do you want? Do you like tile?” It was clear after I finished that I had failed her test. I’m sure there are some kitchen designers out there who may design a kitchen like this, but they’re doing it wrong.

I’ve been a software consultant for about four years. I just recently reflected upon this question and then I realized what I had messed up. When designing software, you need to think about three specific things.

Problems - What problems are your clients having? What problem are you trying to solve? Identify their pain points. I should have identified what my Microsoft interviewer liked to cook. Does she primarily bake? This would have helped me identify the placement particular appliances. Maybe she would have needed a second oven. Does she like to cook with others? Again, this would have helped with placement. I should have asked what her current kitchen looks like. What problems does she have in this kitchen? What are her favorite dishes to cook? If she likes to cook a lot of Japanese… maybe she would benefit from a Hibachi in the middle of her kitchen. I could go on and on. But you must identify the problems that your clients are having. You must observe these problems. They won’t always be able to articulate their problems.

Why - Why are your customers and clients making these requests? If my Microsoft interviewer requested marble tile instead of wood, I should have asked why. Maybe I would have learned that she lives in a tropical climate with a lot of moisture; tile typically lasts longer. This may have opened up the conversation to discuss more about environment factors and her current kitchen. I designed some software for trucking companies to plan which jobs their trucks should be at. The client mentioned that they would like a projector with the software showing the plan. I asked why. They told me that they wanted everyone in the office to know the plan. I mentioned that it would be possible to network the software and install a copy on everyone’s machine so that anyone could just open the software and see the plan. They were ecstatic. They didn’t think about the possibility.

This teaches us another lesson, customers don’t know what you can provide them. I’m reminded of Henry Ford’s quote: “If I had asked what my customers wanted, they would have requested a faster horse.” This demonstrates that customers and clients aren’t usually forward thinking in the solutions that you can provide. Ford would’ve learned that his customers’ problem was speed. This happens to us quite a bit. We typically get requests for mobile software development, but we don’t get much requests for web apps and desktop apps even though cumulatively, we have more experience in the latter.

Art - You are an artist. Very rarely should you present visible design choices to your clients. Obviously, there are exceptions to this. If I told you to design me a kitchen and you just gave me black appliances instead of stainless steel appliances, I may be a bit miffed. However, in the software world, I think it’s different. Very rarely should you focus on the details of the design with your client. It simply doesn’t matter. Many clients will present an abstract concept by talking about ‘buttons’ and ‘icons’… just ignore those request and figure out what they really need. Deliver art.

Go now and build beautiful software, for you are an engineer, philosopher, and an artist.

Senin, 11 Oktober 2010

SISTEM PENUNJANG KEPUTUSAN PADA BANK SYARIAH

SISTEM PENUNJANG KEPUTUSAN PADA BANK SYARIAH
Perkembangan dunia perbankan di Indonesia sekarang cukup kompetitif,masing-masing bank ingin memberikan layanan yang terbaik,ada pula kebutuhan konsumen terhadap produk jasa perbankan yang bersifat syariah.
Bank Syariah adalah Bank Umum yang melaksanakan kegiatan usaha berdasarkan prinsip syariah yang dalam kegiatannya memberikan jasa dalam lalu lintas pembayaran. (UU No. 10 tahun 1998 tentang Perubahan UU No. 7 tahun 1992 tentang Perbankan). Bank syariah harus dapat menampilkan hal-hal yang berbeda dan menarik untuk mendapatkan pelanggan sebanyak-banyaknya. Manajemen yang baik, akan menghasilkan keputusan jangka panjang yang dapat menambah umur suatu perusahaan. Untuk itu dikembangkan sebuah sistem yang dapat membantu manajemen dalam pengambilan keputusan perusahaan atau biasa disebut Sistem Penunjang Keputusan (SPK). SPK di bank disesuaikan dengan fungsinya. Fungsi-fungsi tersebut dapat digambarkan dalam struktur organisasi bank. Contoh struktur organisasi sebuah bank adalah sebagai berikut (contoh struktur organisasi bank Syariah Mandiri):

Struktur organisasi tergantung pada besar-kecilnya bank (bank size), keragaman layanan yang ditawarkan, keahlian personilnya dan peraturan-peraturan perundangan-undangan yang berlaku. Tidak ada acuan baku bagi penyusunan struktur organisasi bagi bank dalam segala situasi kebutuhan operasinya. Bank mengorganisasikan fungsi-fungsinya untuk melayani nasabahnya atau menempatkan karyawan yang ada atau karyawan baru sesuai dengan bakat dan kemampuannyanya. Struktur organisasi setiap bank berikut tanggung jawab dan wewenang para pejabatnya bervariasi satu sama lain. Oleh karena itu struktur organisasi mencerminkan pandangan manajemen tentang cara yang paling efektive untuk mengoperasikan bank.
Sejalan dengan perkembangannya fungsi-sungsi tersebut dapat dibagi-bagi lagi dalam beberapa kegiatan. Dalam perbankan syariah, fungsi pembiayaan dapat dibagi dalam pembiayaan piutang (debt financing) berdasarkan prinsip jual-beli (murabahah, salam atau istishna), atau sewa-beli (ijarah), pembiayaan modal (equity financing) berdasarkan prinsip mudharabah (trustee financing) atau musyarakah (jount venture profit sharing). Fungsi operasi dapat dibagi dalam tellers, pembukaan rekening (opening new account), penerimaan simpanan (deposit), pemrosesan simpanan (deposit) dan layanan yang berkaitan dengan simpanan (deposit related services) seperti pemindah – bukuan, pengiriman uang (money transfer), inkaso (collections), pembayaran tagihan (bill paying) dan lain, komputer service dan akuntansi, personalia dan sundries.
Kegiatan usaha bank syariah antara lain:
Mudharabah, pembiayaan berdasarkan prinsip bagi hasil
1. Musyarakah, pembiayaan berdasarkan prinsip usaha patungan
2. Murabahah, jual beli barang dengan memperoleh keuntungan
3. Ijarah, pembiayaan barang modal berdasarkan prinsip sewa.
Prinsip Operasi Bank Syariah
Bank Syariah menganut prinsip-prinsip sebagai berikut:
1. Prinsip Keadilan Prinsip ini tercermin dari penerapan imbalan atas dasar bagi hasil dan pengambilan margin keuntungan yang disepakati bersama antara Bank dan Nasabah
2. Prinsip Kemitraan Bank Syariah menempatkan nasabah penyimpanan dana, nasabah pengguna dana, maupun Bank pada kedudukan yang sama dan sederajat dengan mitra usaha. Hal ini tercermin dalam hak, kewajiban, resiko dan keuntungan yang berimbang di antara nasabah penyimpan dana, nasabah pengguna dana maupun Bank. Dalam hal ini bank berfungsi sebagai intermediary institution lewat skim-skim pembiayaan yang dimilikinya
3. Prinsip Keterbukaan Melalui laporan keuangan bank yang terbuka secara berkesinambungan, nasabah dapat mengetahui tingkat keamanan dana dan kualitas manajemen bank UniversalitasBank dalam mendukung operasionalnya tidak membeda-bedakan suku, agama, ras dan golongan agama dalam masyarakat dengan prinsip Islam sebagai rahmatan lil’alamiin.
SISTEM PENUNJANG KEPUTUSAN
SPK yang akan dibahas disini lebih dilihat dari produk-produk bank. Secara umum bank syariah mempunyai produk-produk sebagai berikut:
- Penghimpunan dana, seperti tabungan, giro, deposito.
- Pembiayaan/kredit, misalnya kredit pemilikan rumah, kredit usaha, kredit consumer.
- Jasa layanan lainnya, seperti transfer, inkaso, bank garansi.
Di setiap jenis produk bank tersebut memerlukan keputusan-keputusan yang harus diambil, misalnya:
- Pada produk penghimpunan dana, memutuskan berapa persen tingkat bagi hasil keuntungan yang sesuai dengan prinsip syariahtabungan, giro dan deposito, jangka waktu pembayaran, dan sebagainya.
- Pada produk pembiayaan, memutuskan tingkat pinjaman di tiap-tiap jenis kredit, kelayakan suatu pengajuan kredit diterima atau ditolak dan berapa jumlah kredit yang diterima.
- Pada produk jasa layanan lainnya, memutuskan besarnya tarif transfer, memutuskan diterima atau tidak bank garansi dan besarnya.
Untuk mengatasi hal-hal tersebut yaitu keputusan untuk layak atau tidak nasabah mendapat pembiayaan , digunakan sebuah sistem penunjang keputusan. Pemrosesan data dilakukan secara komputerisasi, sehingga lebih efisien. Beberapa data yang harus diproses antara lain:
- Data debitur, meliputi usia, pendidikan, pekerjaan, penghasilan dan pengeluaran perbulan, kreditabilitas, referensi, angsuran lain, tanggungan.
- Data jaminan yang diagunkan, meliputi sertifikat, lokasi, dan harga.
- Prosedur dan dokumen-dokumen berdasar pekerjaannya, misalkan SK pengangkatan PNS, pegawai BUMN
- Kekayaan dan hubungan bank, misalnya jumlah tabungan dan deposito

Jumat, 05 September 2008

Kidou Sensi Gundam 00

Bersiaplah akan datangnya segerombolan pasukan yang ngakunya penyelamat bumi dengan cara extrim ( ngaku lg ). There are the Celetial Being Gundam Meister amp skg gw masi blm dpat darimana kata "Meister" berasal .... Ud gpl lg liat aj dolo cuplikan dari " Kidou Sensi Gundam 00"

.gd00-0003.jpg

2307 AD. dunia mengalami krisis energi, seiring dengan persediaan energi fosil yang semakin menipis. sumber energi kemudian dialihkan ke energi matahari melalui stasiun energi berupa Orbital Elevator yang berbentuk pilar yang menjulang sampai setinggi 50.000 km dari permukaan bumi.

pembangunan Orbital Elevator untuk memenuhi kebutuhan energi dunia mengakibatkan negara-negara kemudian terbagi ke dalam tiga kelompok besar: World Economic Union (Union) yang berbasis di Amerika Serikat, Human Reformation League (HRL) yang disokong oleh Rusia, Cina, dan India, serta Advanced European Union (AEU) yang berbasis di Eropa. pada saat ini, terdapat tiga buah Orbital Elevator yang masing-masing dikuasai oleh Union, HRL, dan AEU.

selain terbentuk sebagai pakta untuk penanggulangan krisis energi, persaingan masing-masing blok negara ini juga meliputi perlombaan senjata dan pertentangan politik, serta perebutan pengaruh dan proxy war di berbagai belahan dunia. pada saat ini pula muncul gerakan militer yang menamakan diri Celestial Being, yang menyatakan diri memiliki tujuan untuk menghentikan segala tindak peperangan yang terjadi di seluruh dunia. dengan persenjataan yang jauh lebih maju dibandingkan blok-blok yang ada, Celestial Being melakukan intervensi terhadap perang yang terjadi di seluruh dunia dengan menghancurkan persenjataan dari pihak-pihak yang bertikai dalam perang.

termasuk dalam persenjataan yang dimiliki oleh Celestial Being adalah yang dikenal sebagai Gundam (ad merknya loo, sepanjang gw non, dengan masing-masing pilot yang disebut sebagai Gundam Meisters: Exia Gundam oleh Setsuna F. Seiei, Dynames Gundam oleh Lockon Stratos, Kyrios Gundam oleh Allelujah Haptism, dan Virtue Gundam oleh Tieria Erde.

cerita berjalan di sekitar keempat Gundam Meisters tersebut… dalam gerakan yang dilakukan oleh Celestial Being, yang dilakukan dengan tujuan untuk menciptakan perdamaian dunia.

gd00-01.jpg

…gimana yah? secara sederhana sih, pemirsa yang ‘kritis’ mungkin akan menemukan bahwa franchise ini kadang-kadang menampilkan plot-twisting dan klimaks cerita yang ‘absurd’. tentu saja, pesan perdamaian dan pasivisme terasa kuat sekali di serial-serial Gundam… mungkin ini relatif sih, tapi loo pada yang mengikuti perjalanan cerita Gundam SEED, Gundam SEED: Destiny, atau Gundam Wing seharusnya ngerti maksud gw. dan tampaknya, Gundam 00 juga tidak lepas dari hal seperti ini.

di episode-episode awal, pemirsa yang mengikuti serial Gundam Wing mungkin akan langsung menyadari kemiripan antara Gundam 00 dengan serial tersebut. konsep cerita di mana terdapat organisasi independen yang anti-perang merupakan konsep yang juga diterapkan dalam Gundam Wing, lengkap dengan pilot-pilot yang bekerja sama dengan idealisme untuk mengakhiri perang dengan masing-masing karakternya. sebagai tambahannya, anda yang cukup jeli mungkin juga akan memperhatikan adanya sedikit kemiripan desain dan karakterisasi antara Setsuna F. Seiei dengan Heero Yuy dari Gundam Wing.

bukan hal yang salah juga, sih. Gundam SEED yang berangkat dari konsep yang mirip dengan serial Gundam yang pertama toh akhirnya sukses dan menjadi fenomena, dan tampaknya Gundam 00 melakukan hal yang sama terhadap Gundam Wing ( mw gimana lg mereka ber-2 sama2 filmyang sempet meledak di jamannya).

gd00-05.jpg

nah, sekarang, mari kita masuk ke bagian teknisnya. dari segi visual, serial ini luar biasa. sebagai serial Gundam yang pertama kali dirilis dalam format high definition, serial ini enak dilihat. penggunaan 3D CG dilakukan dengan sangat baik dibandingkan serial lain di kelasnya. adegan battle mengalir mulus, dan penggambaran karakter dilakukan dengan baik. penggambaran mecha di-cover dengan rapi, dengan desain yang juga bisa dibilang enak dipandang, penggunaan efek sparkle pada penggambaran mecha menunjukan adanya teknologi terbaru yang muncul pada gundam dibanding robot yang lainya. (masi dapat diliat pada chapter2 awal)

di bagian musik, serial ini tampil sangat baik, OP-nya diisi oleh L’Arc~en~Ciel untuk lagu Daybreak’s Bell yang enak didengar… dan entah kenapa, terkesan sangat mainstream. di bagian ED, ada Wana dari The Back Horn, dengan nuansa rock dan sedikit alternatif. tapi, yah, untuk OP dan ED ini sepertinya jatuhnya ke mainstream juga, sih.