Archive for MySQL

Membuat Type Data Null

Posted in Coding, VB.NET with tags , on 24 September 2008 by harisanto

Dengan support terbaru yang terdapat pada .NET, beberapa fitur telah ditambahkan. Salah satunya adalah “Build Typesafe Generic Classes“. Sekarang kita dapat menyelesaikan permasalahan pada type data NULL.

Apakah biasanya anda melakukan pelambangan pada data yang NULL? Saat ini .NET telah melakukan perbaikan dan solve problem.

Nilai NULL yang dikenali oleh Visual Basic sebagai flag istimewa yang menunjukkan data yang tidak muncul. kebanyakan nilai NULL menunjukan bahwa resource atau bisa kita ibaratkan benda tersebut ada tetapi tidak terlihat atau tidak terciptakan. Misalnya pada kode berikut, FileStream berisi Null referensi karena tidak ter-instantiated dengan New Keywords:

Dim fs As FileStream
If fs Is Nothing
    Console.WriteLine("Object contains a null reference.")
End If

Core tipe data seperti  integer dan string tidak dapat berisi NULL Values. Variable numerik akan otomatis bernilaoi 0 (Nol) dan boolean akan berisi variable False. Sedangkan tipe data String akan berisi kosong (“”) secara otomatis. Pada dasarnya, bila anda melakukan set type data dengan variable Nothing pada code, akan secara otomatis bila terjadi kekosongan data akan dikembalikan pada nilai kosong (0,False,””). Contoh:

Dim j As Integer = Nothing
If j = 0 Then
    Console.WriteLine("Non-nullable integer j = " & j)
End If

Bentuk ini kadang-kadang menyebabkan masalah, dimana tidak ada pembeda antara nilai kosong (NULL) dengan nilai yang tidak pernah ada. Secara sederhana saya contohkan, bila anda membuat code dimana anda harus mengembalikan nilai text pada textbox dan pada saat itu diset 0, maka anda tidak dapat tahu, apakah textbox tersebut memang kosong atau 0 adalah nilai awal (Tentu saja bila tidak disertai Flag-flag tertentu sebagai konfigurasi).

.NET 2.0 telah memberikan solusinya, yaitu System.Nullable Class yang dapat melingkupi berbagai macam tipe data. Bila anda membuat suatu definisi yang tidak mempunyai nilai awal (atau nullable) atau tidak melakukan setting nilai dasar, maka anda dapat melakukan test dengan metode Nullable.Hastype() dan anda akan mendapatkan nilai balik Nullable.Value

Berikut contohnya:

Dim i As Nullable(Of Integer)
If Not i.HasValue Then
    Console.WriteLine("i is a null value")
End If

i = 100
If i.HasValue Then
    Console.WriteLine("Nullable integer i = " & i.Value)
End If

…Memakai Nullable sebagai referensi object sangat bermanfaat walaupun anda tidak membutuhkannya, ini akan tetap dapat memberikan anda keuntungan, yaitu paling tidak kode anda akan lebih mudah untuk dibaca HasValue() yaitu metode yang lebih baik untuk melakukan tes untuk value Nothing. Yang terbaik adalah, anda dapat mengadakan perubahan secara berkesinambungan, karena Class Nullable mempunyai kemampuan untuk melakukan konversi antara Nullable dengan type data itu sendiri.

MySQL Data Null Handles With VB 6.0

Posted in Databases with tags , , on 24 July 2008 by harisanto

If sometime you wite code in VB and you will find data into database that’s empty (read Null) and that’s maybe a big problem. Why you not insert some character to make the data field in data row sorted not null…? maybe you have some reason that make it cannot applicated into data storage. You can try solution with ISNULL() Function.

Syntax:
IsNull(expression)

Return Data type:
Boolean

Example:

If IsNull(RsData!telp_asal) = True Then
      Text1(4).Text = ""
      Text1(5).Text = ""
Else
      Text1(4).Text = Mid(RsData!telp_asal, 1, InStr(RsData!telp_asal, "-") - 1)
      Text1(5).Text = Mid(RsData!telp_asal, 1, InStr(RsData!telp_asal, "-") + 1)
End If

That’s it…. simple methode to handle null data from database.

Reducing MySQL Data

Posted in Databases with tags , , , , on 2 July 2008 by harisanto

MySQLIf you use the InnoDB storage engine for (some of) your MySQL tables, you’ve probably already came across a problem with its default configuration. As you may have noticed in your MySQL’s data directory lies a file called ‘innodb1?. It holds almost all the InnoDB data of the MySQL instance and could get quite big. Unfortunately, by design InnoDB data files can’t be shrinked. That’s why DELETEs, TRUNCATEs, DROPs, etc. can’t will not reclaim the space used by the file. Instead any freed regions are marked as unused and can be used later. Theoretically speaking the file could reach the maximum size allowed by the filesystem if no limit is set in the my.cnf file. Guess what ? It’s not set by default. However you can configure your InnoDB engine as described MySQL’s Reference Manual. Additionally you can force the server to create an *.ibd for each newly created InnoDB table by using the ‘innodb_file_per_table‘ option.

As mentioned above, you cannot shrink InnoDB data files. Additionally, you cannot make much changes in the settings of a InnoDB data file. So if you haven’t configured InnoDB properly right after the installation, you’ll probably have a pretty large ibdata1 file. There are three ways to reclaim your free space, but before doing so backup your whole MySQL data directory… just in case. And don’t forget to stop any services using MySQL databases.

Dump the Whole Database

In fact, this is the method I used to solve the problem. It requires much more space and time but it’s maybe the easiest one. So here it is:

  1. Dump all databases by calling:

    /usr/bin/mysqldump –-extended-insert –-all-databases –-add-drop-database –-disable-keys –-flush-privileges –-quick –-routines -triggers > all-databases.sql

  2. Stop the MySQL server;
  3. Rename or remove (in case you’ve already backed it up) the MySQL data directory and create an empty one with the same name and permissions;
  4. Make the appropriated changed in my.cnf;
  5. From the command prompt issue ‘mysql_install_db‘ in order to re-initialize the database;
  6. Start the MySQL server;
  7. Get into the ‘mysql‘ console and type:

    SET FOREIGN_KEY_CHECKS=0;
    SOURCE all-databases.sql;
    SET FOREIGN_KEY_CHECKS=1;

:) Have fun !

Secure MySQL Database Tunnel

Posted in Databases with tags , , , , on 28 May 2008 by harisanto

MySQLMySQL adalah salah satu database yang paling banyak digunakan, apalagi saat ini telah merambah pada pemrograman Dot Net. Kebetulan saya saat ini sedang melakukan development application dengan menggunakan .Net dengan MySQL sebagai basis data. Selain dapat menghemat biaya lisensi :p untuk basis data, saya juga dapat memodifikasi aplikasi buatan saya dengan banyak pilihan dan meng-nyelaraskannya dengan sistem basis data yang saya gunakan.

Salah satu kendala yang saya hadapi adalah lambatnya koneksi antara applikasi saya yang dijembatani oleh ADO.NET dengan MySQL, walaupun pada saat melakukan Query kecepatannya sangat tinggi :) . Entah apa yang terjadi pada saat koneksi pertama kali yang dilakukan ADO.NET, tetapi itu sangat menggangu saya, apalagi pembandingnya adalah MsSQL yang bisa dengan cepat membaur dengan applikasi saya.

Read more »

FORMAT TABEL MYSQL

Posted in Databases, MySQL with tags , , , , , , on 6 March 2008 by harisanto

Jenis Format Tabel Pada MySQL


MySQL menyediakan beberapa jenis format tabel yang penggunaannya tergantung dari tujuan pembuatan tabel tersebut. Jenis format tabel tersebut diantaranya adalah:
1.Format Tabel MyISAM
2.Format Tabel Innodb
Bila ditinjau dari kemampuan tabel, maka kedua tabel tersebut dapat dikategorikan sebagai tabel dengan kemampuan bertransaksi (transaction-safe tables /TST) dan tabel tanpa kemampuan bertransaksi (not transaction-safe tables /NTST), sehingga daftar tabel di atas dapat kita bagi lagi menjadi:

  1. Transaction-Safe Tables (TST) Format Tabel Innodb
  2. Not Transaction-Safe Tables (NTST) Format Tabel MyISAM
Apa yang dimaksud dengan Transaksi? Transaksi adalah kemampuan software untuk membatalkan suatu proses, kemudian mengembalikan nilai awal sebelum proses tersebut terjadi. Kita dapat membayangkannya sebagai sebuah transaksi keuangan di bank. Anggaplah Anda sedang berdiri di depan sebuah mesin ATM untuk melakukan penarikan tunai. Sebelumnya Anda memiliki saldo awal 10 juta rupiah, dan berniat mengambil uang tunai sebanyak 2 juta rupiah saja. Bila transaksi tunai berhasil, maka Anda akan mendapatkan uang tunai dari ATM sebesar 2 juta rupiah, dan secara langsung nilai saldo di rekening Anda akan berkurang sebanyak 2 juta rupiah, sehingga menjadi 8 juta rupiah. Itu skenario normalnya, bila semuanya berjalan secara lancar-lancar saja.Skenario tidak normalnya adalah bagaimana bila mesin ATM belum berhasil mengeluarkan uang tunai yang Anda minta, tetapi tiba-tiba terjadi aliran listrik padam. Apakah saldo Anda akan tetap berkurang sebanyak 2 juta rupiah walaupun Anda belum menerima uang tunai tersebut dari mesin ATM? Lebih parah lagi, kartu ATM Anda ikut tertelan di mesin ATM tersebut , atau saldo Anda akan tetap berjumlah 10 juta rupiah karena transaksi akan dibatalkan secara otomatis oleh sistem perbankan? Atau, yang paling menguntungkan, saldo Anda tetap 10 juta rupiah tetapi ATM sempat mengeluarkan uang juga.
Bila database perbankan tersebut memiliki fasilitas transaction-safe tables (TST) maka yang terjadi adalah saldo And a di rekening tetap 10 juta rupiah, Anda sama sekali tidak menerima uang tunai 2 juta rupiah dari ATM, serta kartu ATM Anda selamat tidak tertelan di mesin tersebut. Adil kan? Kurang lebih seperti itulah gambaran sederhana dari cara kerja transaction -safe tables (TST). Sebaliknya, bila tidak di dukung oleh transaction-safe tables (TST), maka Anda mungkin akan mengalami kerugian .
Keunggulan transaction-safe tables (TST) dibandingkan dengan not transaction-safe tables (NTST) adalah:

  1. Lebih aman. Seperti pada contoh kasus di atas.
  2. Cukup menggunakan satu perintah COMMIT saja untuk mengupdate beberapa perintah di atasnya.
  3. Dapat menjalankan perintah ROLLBACK yang mengabaikan perubahan -perubahan yang
  4. terjadi pada transaksi yang dibatalkan.

Sedangkan keunggulan dari not transaction-safe tables (NTST) dibandingkan dengan transaction-safe tables (TST) adalah:

  1. Proses lebih cepat karena tidak adanya beban transaksi (no transaction overhead ).
  2. Penggunaan ruang dalam hard disk yang lebih hemat karena tidak adanya beban transaksi.
  3. Penggunaan memori yang lebih hemat, juga karena tidak adanya beban transaksi.
Dari gambaran di atas, Anda bisa menentukan format tabel apa saja yang akan Anda pilih sesuai dengan kebutuhan. Tentu harus ada pertimbangan yang matang dalam hal pemilihan format tabel ini. Pada MySQL sendiri, format tabel MyISAM merupakan format default yang digunakan. Selanjutnya, mari kita bahas format tabel tersebut.

Format Tabel MyISAM

Format tabel MyISAM merupakan pengembangan dan penyempurnaan dari format tabel ISAM, dan merupakan format tabel default pada MySQL. Pada MyISAM file indeks disimpan dengan nama akhiran .MYI dan file data disimpan dengan nama akhiran .MYD. Adapun penyempurnaan yang dilakukan pada MyISAM antara lain:

  1. Adanya suatu kode pembeda yang akan memberi tanda bila suatu tabel tidak ditutup dengan semestinya setelah dibuka. Bila Anda menjalankan program MySQL Server, mysqld, dengan pilihan –myisam-recover, maka secara otomatis tabel yang telah ditandai tersebut akan dipulihkan (bila rusak) atau ditutup dengan semestinya (bila belum ditutup). Hal ini sangat membantu untuk menjaga keutuhan dan validitas tabel.
  2. Kemampuan kolom AUTO_INCREMENT lebih handal dibandingkan dengan format tabel ISAM.
  3. Mendukung file ukuran besar (63-bit) pada sistem operasi tertentu yang juga mendukung
  4. pembuatan dan pembacaan file-file data ukuran besar.
  5. Pada kolom BLOB dan TEXT bisa dilakukan pengindeksan.
  6. NULL diperkenankan pada kolom yang diindeks (tetapi sebaiknya dihindari saja).
  7. Jumlah maksimum file indeks adalah 32 buah per tabelnya, dan masih dapat dikembangkan hingga mencapai 64 buah per tabel dengan kondisi tertentu tanpa harus mengkompilasi ulang program myisamchk.
  8. Program bantu myisampack dapat memadatkan kolom BLOB dan VARCHAR.

Walaupun format tabel MyISAM dapat dikategorikan sangat handal, tetapi pada suatu saat bisa saja terjadi kerusakan yang diakibatkan oleh:

  1. Server mati secara mendadak akibat aliran listrik padam.
  2. Kerusakan pada perangkat keras.
  3. Penghentian proses oleh perintah KILL pada saat proses sedang dalam kondisi menulis.
  4. Kesalahan pada program MySQL atau ISAM.
  5. Melakukan suatu proses dengan program bantu lain (seperti MyISAM) pada saat tabel sedang sibuk diakses.

Ciri-ciri tabel MyISAM yang mengalami kerusakan antara lain:

  1. Munculnya pesan kesalahan ‘ Incorrect key file for table: ‘…’
  2. Query tidak menghasilkan data yang lengkap.
Bila hal tersebut terjadi, yang dapat Anda lakukan adalah segera memperbaiki kerusakan tabel tersebut dengan menggunakan perintah CHECK TABLE atau REPAIR TABLE.
mysql> CHECK TABLE nama_tabel pilihan_pemeriksaan ;
mysql> REPAIR TABLE nama_tabel pilihan_perbaikan ;
Bila Anda ingin mengubah format tabel ke MyISAM, lakukan dengan cara:
mysql> ALTER TABLE nama_tabel TYPE=MYISAM ;
Pada saat pertama kali kita membuat tabel ini dengan perintah CREA TE TABLE, bisa dinyatakan dengan perintah sebagai berikut:
mysql> CREATE TABLE ujian
-> (NoSiswa INT NOT NULL AUTO_INCREMENT,
-> Nilai INT NOT NULL,
-> PRIMARY KEY (NoSiswa))
-> TYPE=MyISAM ;
Atau bisa juga dengan perintah di bawah ini, dengan menghilangkan perintah TYPE=MYISAM, karena format tabel MyISAM adalah format tabel default yang digunakan oleh MySQL.
mysql> CREATE TABLE ujian
-> (NoSiswa INT NOT NULL AUTO_INCREMENT,
-> Nilai INT NOT NULL,
-> PRIMARY KEY (NoSiswa))
-> ;
Format Tabel InnoDB
Format Tabel InnoDB mendukung proses transaksi dengan adanya fasilitas rollback dan commit, dan juga kemampuan untuk memulihkan tabel bila terjadi kerusakan pada tabel tersebut. Mampu melakukan penguncian (locking) pada tingkatan record dan juga mampu membaca pada perintah SELECT yang tidak dikunci (mirip dengan kemampuan Oracle). Kemampuan-kemampuan tersebut meningkatkan kecepatan dan kinerja penggunaan multi user. Ada banyak sekali fitur yang disediakan oleh Tabel InnoDb ini. Anda bisa mendapatkan informasi lebih rinci langsung di situs www.innodb.com. Anda bisa juga mendapatkan versi komersial dari InnoDB yang bisa didownload pada situs tersebut.
InnoDb telah digunakan untuk database yang membutuhkan kinerja sangat tinggi dan berukuran sangat besar. Misal, Mytrix Inc, sebuah perusahaan yang bergerak di bidang riset statistik di Internet , menggunakan InnoDb untuk mengelola data lebih dari 1 Terabyte (1012 byte), dengan jumlah tabel lebih dari 100.000. Secara keseluruhan jumlah recordnya mencapai lebih dari 20 milyar record. Sebuah bursa saham Paris di Perancis menggunakan InnoDB sebagai solusi databasenya. Pada saat beban kerja sedang sepi, jumlah query yang dilayani mencapai rata-rata 800 proses insert/update per detiknya. Sedangkan pada saat ramai, jumlah query yang dilayani mencapai rata -rata 2.000 proses insert/update per detiknya.
Kelebihan format tabel InnoDB antara lain:
  1. Format Tabel InnoDB mendukung transaksi dengan menyediakan fasilitas rollback dan commit.
  2. InnoDB merupakan satu-satunya format tabel di dalam MySQL yang mendukung Foreign Key Constraint .
  3. Kecepatan InnoDB pada beberapa kasus bahkan melebihi kecepatan format tabel MyISAM. Informasi mengenai kecepatan ini dapat dilihat di halaman benchmark dengan alamat http://www.innodb.com/bench.html.
  4. InnoDB memiliki kemampuan melakukan penguncian pada tingkatan record ( row level locking). Bandingkan dengan MyISAM yang hanya memiliki kemampuan penguncian pada tingkatan tabel (table level locking). Hal ini sangat berpengaruh dalam meningkatkan kinerja akses multiuser.InnoDB memiliki fasilitas backup secara langsung, yaitu dapat melakukan backup pada database yang sedang berjalan tanpa harus melakukan proses locking dulu dan tidak akan mengganggu operasional database.
  5. InnoDB memiliki kemampuan memulihkan tabel secara otomatis pada tabel-tabel yang rusak.
  6. Ukuran database InnoDB dapat melebihi 2 Gigabyte, walaupun sistem operasi yang digunakan saat itu tidak mendukung penggunaan database melebihi 2 Gigabyte.