{"id":7939,"date":"2020-10-17T11:42:25","date_gmt":"2020-10-17T04:42:25","guid":{"rendered":"http:\/\/binus.ac.id\/knowledge\/?p=7939"},"modified":"2020-12-17T13:17:19","modified_gmt":"2020-12-17T06:17:19","slug":"merancang-sistem-database-pelaporan","status":"publish","type":"post","link":"https:\/\/binus.ac.id\/knowledge\/2020\/10\/merancang-sistem-database-pelaporan\/","title":{"rendered":"Merancang Sistem Database Pelaporan"},"content":{"rendered":"<p>Setiap aplikasi <em>enterprise<\/em> saat ini pasti melakukan penyimpanan data dengan menggunakan <em>database. Database<\/em> ini mendukung <em>operational database<\/em> yang biasa disebut <em>OLTP(Online Transactional Processing)<\/em> dan juga digunakan sebagai sumber data untuk berbagai jenis laporan untuk analisis dan pengambilan keputusan.<\/p>\n<p>Laporan operational terkadang memiliki kebutuhan khusus yang sedikit berbeda dengan skema data dan pola pengaksesan data (<em>cross bounded context<\/em> pada <em>microservice architecture).<\/em><\/p>\n<p>Ketika ini terjadi, maka sebaiknya dilakukan pemisahan antara <em>operational database<\/em> dengan <em>reporting database. Reporting database<\/em> akan menduplikasi data dari <em>operational database<\/em> sesuai dengan kebutuhan skema laporan. Jenis <em>engine database-nya<\/em> pun bisa berbeda dengan yang digunakan pada <em>database<\/em> operasional.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/reportingDatabase.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-7940 aligncenter\" src=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/reportingDatabase.png\" alt=\"Reporting Database\" width=\"704\" height=\"296\" srcset=\"https:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/reportingDatabase.png 704w, https:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/reportingDatabase-480x202.png 480w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><\/a><strong>Gambar 1. Transfer data dari <em>operational database<\/em> ke <em>reporting database<\/em><\/strong><br \/>\n<strong>Sumber Gambar: https:\/\/martinfowler.com\/bliki\/ReportingDatabase.html<\/strong><\/p>\n<p>Keuntungan dari <em>reporting database<\/em> antara lain:<\/p>\n<ul>\n<li>Struktur skema dari <em>reporting database<\/em> dapat dirancang secara spesifik agar mempermudah pembuatan laporan.<\/li>\n<li>Tidak perlu melakukan normalisasi, karena digunakan hanya untuk <em>dibaca\/di-query<\/em> dan ditampilkan.<\/li>\n<li>Perubahan pada <em>operational database<\/em> secara relatif tidak langsung berdampak pada <em>reporting database.<\/em><\/li>\n<li>Pencarian data atau <em>queries<\/em> terhadap <em>reporting database<\/em> tidak membebani <em>operational database.<\/em><\/li>\n<li>Data yang merupakan derivasi \/ gabungan dapat disimpan pada<em> reporting database<\/em>.<\/li>\n<li>Dapat membuat banyak jenis <em>reporting database<\/em> sesuai dengan kebutuhan pelaporan.<\/li>\n<\/ul>\n<p>Kekurangan dari <em>reporting database<\/em> adalah data yang harus terjaga kebaruannya. Beberapa variasi antara lain dengan mempopulasi data setiap periode tertentu. Namun, pada kenyataannya banyak kebutuhan akan laporan berdasarkan data terbaru atau saat ini.<\/p>\n<p>Pada kebutuhan <em>reporting database<\/em> yang membutuhkan data terbaru, dapat dilakukan dengan menggunakan <em>messaging<\/em> \/ <em>event sourcing system<\/em> (seperti Apache Kafka, RabbidMQ) dimana perubahan data pada <em>operational database<\/em> akan dikirimkan ke <em>reporting database<\/em>.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/json_relational.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7948 aligncenter\" src=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/json_relational-338x342.png\" alt=\"\" width=\"338\" height=\"342\" srcset=\"https:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/json_relational-338x342.png 338w, https:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/json_relational.png 466w\" sizes=\"auto, (max-width: 338px) 100vw, 338px\" \/><br \/>\n<\/a><strong>Gambar 2. Transfer data menggunakan <em>messaging system<\/em> dari<\/strong><br \/>\n<strong><em>operational database<\/em> ke <em>reporting database<\/em><\/strong><br \/>\n<strong>Sumber Gambar: https:\/\/dzone.com\/articles\/nosql-storage-relational<\/strong><\/p>\n<p>Bila Anda ingin menelusuri lebih lanjut, silakan membaca artikel\u00a0 yang ditulis oleh Paul Hammant berdasarkan landasan dari Martin Fowler ini. Artikel tersebut membahas tentang bagaimana <em>operational database<\/em> diimplementasikan pada <em>NoSQL database engine<\/em> dan <em>reporting database<\/em> diimplementasikan pada <em>SQL relational database engine<\/em>.<\/p>\n<p><strong>Sumber Referensi:<\/strong><br \/>\n<a href=\"https:\/\/martinfowler.com\/bliki\/ReportingDatabase.html\">https:\/\/martinfowler.com\/bliki\/ReportingDatabase.html<\/a><br \/>\n<a href=\"https:\/\/dzone.com\/articles\/nosql-storage-relational\">https:\/\/dzone.com\/articles\/nosql-storage-relational<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setiap aplikasi enterprise saat ini pasti melakukan penyimpanan data dengan menggunakan database. Database ini mendukung operational database yang biasa disebut OLTP(Online Transactional Processing) dan juga digunakan sebagai sumber data untuk berbagai jenis laporan untuk analisis dan pengambilan keputusan. Laporan operational terkadang memiliki kebutuhan khusus yang sedikit berbeda dengan skema data dan pola pengaksesan data (cross [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":7962,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83],"tags":[456,455,454,457],"class_list":["post-7939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-application","tag-database","tag-reporting","tag-system-design"],"_links":{"self":[{"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/posts\/7939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/comments?post=7939"}],"version-history":[{"count":8,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/posts\/7939\/revisions"}],"predecessor-version":[{"id":7968,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/posts\/7939\/revisions\/7968"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/media\/7962"}],"wp:attachment":[{"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/media?parent=7939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/categories?post=7939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/binus.ac.id\/knowledge\/wp-json\/wp\/v2\/tags?post=7939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}