Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mengapa kita membagi tabel mysql menjadi banyak tabel yang lebih kecil?

Saya pikir Anda memiliki beberapa istilah yang tercampur di sini.

Semua data Anda masuk ke dalam satu database (alias skema). Dalam database Anda dapat memiliki tabel.

misalnya

table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

Di dalam tabel Anda memiliki bidang (id, name, address) alias kolom. Dan tabel memiliki satu atau lebih baris.
Contoh untuk karyawan tabel:

id  name        address           country
----------------------------------------------------
1   John        1 Regent Street   UK
2   James       24 Jump Street    China
3   Darth Vader 1 Death Star      Bestine, Tatooine

Begitu banyak untuk dasar-dasarnya.

Mengapa mempartisi
Sekarang misalkan kita memiliki banyak sekali orang (baris) di database kita.
Ingat ini database galaksi, jadi kita punya 100 miliar record.
Jika kita ingin menelusuri secepat ini bagus jika kita bisa melakukan ini secara paralel.
Jadi kita mempartisi tabel (katakanlah berdasarkan negara) dan kemudian kita dapat memiliki x server yang mencari di 1 negara masing-masing.
Mempartisi antar server disebut sharding .

Atau kita dapat mempartisi mis. data historis menurut tahun, jadi kita tidak perlu menelusuri semua data hanya untuk mendapatkan terbaru berita. Kami hanya harus melalui partisi untuk tahun ini. Ini disebut partitioning .

Apa perbedaan besar antara sharding cukup partitioning ?

Berbagi
Dalam sharding Anda mengantisipasi bahwa semua data Anda relevan, dan kemungkinannya sama untuk ditanyakan. (mis. Google dapat mengharapkan semua data mereka ditanyakan; pengarsipan sebagian data mereka tidak berguna untuk mereka).
Dalam hal ini Anda ingin banyak mesin melihat data Anda secara paralel, di mana setiap mesin melakukan bagian dari work.
Jadi, Anda memberi setiap mesin partisi (pecahan) data yang berbeda dan memberikan kueri yang sama kepada semua mesin. Ketika hasilnya keluar, Anda UNION mereka semua bersama-sama dan output hasilnya.

Pembagian dasar
Dalam partitioning dasar sebagian data Anda hot dan sebagian adalah not . Kasus tipikal adalah data historis, data baru adalah hot , data lama hampir tidak tersentuh.
Untuk kasus penggunaan ini, tidak ada gunanya meletakkan data lama di server terpisah. Mesin-mesin itu hanya akan menunggu dan menunggu dan tidak melakukan apa-apa karena tidak ada yang peduli dengan data lama kecuali beberapa auditor yang memeriksanya setahun sekali.
Jadi, Anda mempartisi data itu berdasarkan tahun dan server akan secara otomatis mengarsipkan partisi lama sehingga Anda kueri hanya akan melihat data satu (mungkin 2) tahun dan jauh lebih cepat.

Apakah saya perlu mempartisi?
Anda hanya melakukan partisi jika Anda memiliki banyak data, karena itu mempersulit pengaturan Anda.
Kecuali Anda memiliki lebih dari satu juta record, Anda tidak perlu mempertimbangkan untuk mempartisi.
Jika Anda memiliki lebih dari 100 juta catatan, Anda pasti harus mempertimbangkannya.

Untuk info lebih lanjut lihat:http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
dan:http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Lihat juga wiki:http://en.wikipedia.org/wiki /Partition_%28database%29

Ini hanya heuristik pribadi saya YMMV.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan $_GET untuk mendapatkan beberapa parameter menggunakan nama yang sama di PHP

  2. Menggunakan label dalam klausa memiliki di sqlchemy

  3. Driver JDBC MySQL 5.1.33 - Masalah Zona Waktu

  4. Apa gunanya NOT NULL DEFAULT '' ?

  5. pendekatan yang lebih baik daripada menyimpan kata sandi mysql dalam teks biasa di file konfigurasi?