mengapa innodb menyimpan semua database dalam satu file?
<p>itu nyaman bahwa myisam digunakan untuk menyimpan setiap tabel dalam file yang sesuai. innodb telah membuat kemajuan dalam banyak aspek, tetapi saya ingin tahu mengapa innodb menyimpan semua basis data dalam satu file (<code>ibdata1</code> secara default).</p><p>saya mengerti bahwa innodb akan memetakan lokasi data dalam file dengan file indeks individual untuk tabel, tapi saya tidak mengerti mengapa itu mencampur semua data dalam satu file. dan yang lebih penting, mengapa mencampur data semua database di server?</p><p>fitur menarik dari myisam adalah bahwa seseorang dapat menyalin/menempel folder database ke komputer lain dan kemudian menggunakan database (tanpa dump).</p>
<p>arsitektur innodb menuntut penggunaan empat tipe dasar halaman info</p><ul> <li>halaman data tabel</li> <li>halaman indeks tabel</li> <li>tabel metadata</li> <li> <a href="http://en.wikipedia.org/wiki/multiversion\_concurrency\_control"><strong> [~ # ~] mvcc [~ # ~] </strong></a> data (untuk mendukung isolasi transaksi dan <a href="http://en.wikipedia.org/wiki/acid"><strong> kepatuhan acid </strong></a> ) <ul> <li>segmen kembalikan</li> <li>batalkan spasi</li> <li>double write buffer (penulisan latar belakang untuk mencegah ketergantungan pada caching os)</li> <li>masukkan buffer (mengelola perubahan pada indeks sekunder yang tidak unik)</li> </ul> </li> </ul><p> <a href="http://www.scribd.com/doc/31337494/xtradb-innodb-internals-in-drawing"><strong> <em> lihat representasi pictorial dari ibdata1</em> </strong></a> </p><p>secara default, <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan. ini menyebabkan keempat jenis halaman info mendaratkan satu file bernama ibdata1. banyak orang mencoba menyebar data dengan membuat banyak file ibdata. ini dapat menyebabkan fragmentasi data dan halaman indeks.</p><p>inilah sebabnya saya sering <a href="https://stackoverflow.com/a/4056261/491757">merekomendasikan untuk membersihkan infrastruktur innodb, menggunakan file ibdata1 default dan tidak lebih</a> .</p><p>menyalin sangat berbahaya karena infrastruktur di mana innodb bekerja. ada dua infrastruktur dasar</p><ul> <li>innodb\_file\_per\_table dinonaktifkan</li> <li>innodb\_file\_per\_table diaktifkan</li> </ul><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan, semua jenis info innodb ini tinggal di dalam ibdata1. satu-satunya manifestasi dari setiap tabel innodb di luar ibdata1 adalah file .frm dari tabel innodb. menyalin semua data innodb sekaligus membutuhkan menyalin semua/var/lib/mysql.</p><p>menyalin tabel innodb individu sama sekali tidak mungkin. anda harus membuang mysql untuk mengekstrak dump tabel sebagai representasi logis dari data dan definisi indeks yang sesuai. anda kemudian akan memuat dump itu ke database lain di server yang sama atau server lain.</p><h1>innodb ( <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan)</h1><p>dengan <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan, data tabel dan indeksnya tinggal di folder database di sebelah file .frm. misalnya, untuk tabel db1.mytable, manifestasi dari tabel innodb di luar ibdata1 adalah:</p><ul> <li><code>/var/lib/mysql/db1/mytable.frm</code></li> <li><code>/var/lib/mysql/db1/mytable.ibd</code></li> </ul><h1>tablespace sistem <code>ibdata1</code></h1><p>semua metadata untuk db1.mytable masih berada di ibdata1 dan <em> sama sekali tidak ada jalan lain</em>. redo log dan data mvcc juga masih hidup dengan ibdata1.</p><p>ketika datang ke tabel fragmentasi, inilah yang terjadi pada ibdata1:</p><ul> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> diaktifkan </strong>: anda dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code>. ini menghasilkan /var/lib/mysql/db1/mytable.ibd secara fisik lebih kecil tanpa fragmentasi.</li> <li><strong> <a href="http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar\_innodb\_file\_per\_table">innodb\_file\_per\_table</a> dinonaktifkan </strong>: anda tidak dapat mengecilkan db1.mytables dengan <code>alter table db1.mytable engine=innodb;</code> atau <code>optimize table db1.mytable;</code> karena berada dengan ibdata1. menjalankan perintah mana pun sebenarnya, membuat tabel berdekatan dan lebih cepat untuk membaca dan menulis. sayangnya, itu terjadi pada akhir ibdata1. ini membuat ibdata1 tumbuh dengan cepat. <a href="https://stackoverflow.com/a/4056261/491757">ini sepenuhnya dibahas di pos pembersihan innodb saya</a> .</li> </ul><h1>peringatan (atau bahaya sebagai <a href="http://www.youtube.com/watch?v=rg0ochx16dg&amp;feature=related">robot akan mengatakan dalam lost in space</a> )</h1><p>jika anda berpikir untuk hanya menyalin file .frm dan .ibd, anda sejalan dengan dunia yang menyakitkan. menyalin file .frm dan .ibd dari tabel innodb hanya baik <strong> <em> jika dan hanya jika anda dapat menjamin bahwa id tablespace dari file .ibd cocok persis dengan entri tablespace id di metadata dari file ibdata1</em> </strong>.</p><p>saya menulis dua posting di dba stackexchange tentang konsep id tablespace ini</p><ul> <li> <a href="https://dba.stackexchange.com/questions/9500/table-compression-in-innodb/9555#9555">kompresi tabel dalam innodb?</a> (di bawah judul 'memulihkan database')</li> <li> <a href="https://dba.stackexchange.com/questions/6268/how-to-recover-an-innodb-table-whose-files-were-moved-around/6269#6269">cara memulihkan tabel innodb yang file-nya dipindahkan</a> </li> </ul><p>berikut ini adalah tautan yang sangat baik tentang cara memasang kembali file .ibd ke ibdata1 jika id tablespace tidak cocok: <a href="http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file">http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in- file</a> . setelah membaca ini, anda harus segera menyadari bahwa menyalin file .ibd benar-benar gila.</p><p>untuk innodb, anda hanya perlu memindahkan sesuatu ini</p><pre><code>create table db2.mytable like db1.mytable; insert into db2.mytable select * from db1.mytable; </code></pre><p>untuk membuat salinan tabel innodb.</p><p>jika anda memigrasikannya ke server db lain, gunakan mysqldump.</p><p>sehubungan dengan mencampur semua tabel innodb dari semua database, saya benar-benar dapat melihat kebijaksanaan dalam melakukannya. di perusahaan hosting db/web perusahaan saya, saya memiliki satu klien mysql yang memiliki tabel di satu basis data yang batasannya dipetakan ke tabel lain di basis data lain dalam instance mysql yang sama. dengan satu repositori metadata yang umum, itu membuat dukungan transaksional dan pengoperasian mvcc mungkin di beberapa basis data.</p>
<p><strong>codebehind</strong>: perlu dikompilasi (model asp.net 1.1). biner yang dikompilasi ditempatkan di folder bin dari situs web. anda perlu melakukan kompilasi di visual studio sebelum anda menyebarkan. ini adalah model yang baik ketika anda tidak ingin kode sumber dapat dilihat sebagai teks biasa. misalnya saat mengirim ke pelanggan yang tidak memiliki kewajiban untuk memberikan kode.</p><p><strong>codefile</strong>: anda memberikan solusi untuk penyebaran file sumber. asp.net 2.0 runtime mengkompilasi kode ketika dibutuhkan. file yang dikompilasi berada di microsoft.net [.net version]\temporary asp.net files.</p> <p>anda dapat menggunakan <a href="http://opendb.iamvegan.net/wiki/index.php?title=main\_page">opendb</a> . anda harus meng-host-nya sendiri, tetapi harus mudah dijalankan di komputer dasar apa pun yang dapat digunakan oleh apache + php. godaddy juga menawarkannya sebagai aplikasi yang dapat diinstal pada paket hosting mereka.</p> keunggulan pengolahan data digital dibandingkan dengan data manual yaitu:


 minimalisisir duplikat/ double data
 tingkat kevalidan data tinggi karena saling berelasi, sehingga apabila ada perubahan akan merubah data lainnya yang masih dalam satu lembar kerja
 indepedensi data yaitu data tidak dapat dirubah apabila data tersebut sedang dioperasikan
 dapat berbagi data dengan perangkat lain secara cepat dan mudah
 memerlukan biaya yang murah apabila dibandingkan dengan data manual yang memerlukan peta dalam bentuk cetak yang banyak
 mampu mengolah data dalam jumlah besar secara cepat dan tepat karena dilakukan oleh sistem
 tingkat keamanan tinggi, sehingga meminimalisir hilangnya data atau plagiat.
 tidak memerlukan banyak ruang untuk menyimpan data


sehingga jawaban yang benar adalah nomor 1,3,dan 5

berdasarkan pembahasan di atas, jawaban yang tepat untuk soal ini adalah c. <p>ketahuilah bahwa php pada umumnya lebih lambat di bawah windows daripada di bawah sistem operasi seperti unix. semuanya menjadi lebih baik dengan versi yang lebih baru (pembaruan!) tetapi masih ada perbedaan yang terukur.</p><p>yang mengatakan ada dua langkah besar yang harus diambil ketika mengoptimalkan server anda php kinerja:</p><ol> <li> <p>gunakan fastcgi</p> <p>walaupun fpm hanya berfungsi di unix, fastcgi juga bekerja dengan iis di bawah windows. ini tutorial dari microsoft sendiri tentang cara melakukannya: <a href="http://www.iis.net/learn/application-frameworks/running-php-applications-on-iis/set-up-fastcgi-for-php">http://www.iis.net/ learn/application-frameworks/running-php-application-on-iis/set-up-fastcgi-for-php</a> </p> </li> <li> <p>gunakan cache opcode</p> <p>sekali lagi microsoft telah anda tutupi dengan ekstensi <a href="http://www.iis.net/downloads/microsoft/wincache-extension">wincache</a> .</p> </li> </ol><p>jika anda masih memiliki masalah kinerja setelah langkah-langkah ini, saya sarankan untuk membuat profil versi windows dan linux. anda dapat menggunakan <a href="http://www.php.net/manual/en/book.xhprof.php">xhprof</a> atau <a href="http://xdebug.org">xdebug</a> . coba cari tahu apakah anda memiliki masalah dengan kinerja php atau mysql. tes lain yang bisa anda lakukan adalah melayani kedua salinan dari server database yang sama (harus menjadi server ketiga). itu akan dengan cepat memberi tahu anda apakah anda memiliki php atau masalah mysql.</p> <p>karakter unicode 4 byte belum banyak digunakan, jadi tidak semua aplikasi di luar sana mendukung sepenuhnya. mysql 5.5 berfungsi dengan baik dengan karakter 4 byte ketika dikonfigurasi dengan benar - periksa apakah komponen anda yang lain dapat bekerja dengannya juga.</p><p>berikut beberapa hal lain yang perlu diperiksa:</p><ul> <li> <p>pastikan semua rangkaian karakter default tabel dan bidang teks anda dikonversi ke utf8mb4, di samping menetapkan set karakter klien &amp; server, mis. <code>alter table mytable charset=utf8mb4, modify column textfield1 varchar(255) character set utf8mb4,modify column textfield2 varchar(255) character set utf8mb4;</code> dan seterusnya.</p> <p>jika data anda sudah dalam karakter utf8, itu harus dikonversi ke utf8mb4 di tempat tanpa masalah. seperti biasa, buat cadangan data anda sebelum mencoba!</p> </li> <li> <p>pastikan juga lapisan aplikasi anda menyetel karakter koneksi basis data ke utf8mb4. periksa ini benar-benar terjadi - jika anda menjalankan versi yang lebih lama dari pustaka klien mysql framework yang anda pilih, itu mungkin belum dikompilasi dengan dukungan utf8mb4 dan itu tidak akan mengatur charset dengan benar. jika tidak, anda mungkin harus memperbarui atau mengompilasinya sendiri.</p> </li> <li> <p>saat melihat data anda melalui klien mysql, pastikan anda menggunakan mesin yang dapat menampilkan emoji, dan jalankan <code>set names utf8mb4</code> sebelum menjalankan kueri.</p> </li> </ul><p>setelah setiap tingkat aplikasi anda dapat mendukung karakter baru, anda harus dapat menggunakannya tanpa korupsi.</p> <p>shmuel613, akan lebih baik untuk memperbarui pertanyaan awal anda daripada menjawab. lebih baik jika ada satu tempat yang berisi pertanyaan lengkap daripada menyebar dalam diskusi.</p><p>jawaban ben masuk akal, kecuali ia tampaknya memiliki 'tidak' di mana ia tidak menginginkannya. menjatuhkan tabel hanya jika<strong> tidak </strong>ada tidak tepat.</p><p>anda memang membutuhkan banyak pernyataan. buat dengan kondisional lalu isi:</p><ol> <li>buat tabel sementara jika tidak ada fubar (id int, name varchar (80))</li> <li>truncate table fubar</li> <li>masukkan ke dalam fubar pilih * dari barfu</li> </ol><p>atau cukup jatuhkan dan buat ulang</p><ol> <li>drop tabel jika ada fubar</li> <li>buat tabel sementara id select fubar, nama dari barfu</li> </ol><p>dengan sql murni itu adalah dua kelas solusi nyata anda. saya suka yang kedua lebih baik.</p><p>(dengan prosedur tersimpan anda bisa menguranginya menjadi satu pernyataan. sesuatu seperti: truncateandpopulate (fubar) tetapi pada saat anda menulis kode untuk truncateandpopulate () anda akan menghabiskan lebih banyak waktu daripada hanya menggunakan sql di atas.)</p> <p>anda dapat memasukkan objek pada posisi <em>valid</em> apa saja. perhatikan javadoc untuk <a href="http://download.oracle.com/javase/6/docs/api/java/util/list.html#add%28int,%20e%29"><code>add(int, e)</code></a> :</p><blockquote> <p><strong>lempar:</strong><br> indexoutofboundsexception - jika indeks di luar kisaran <code>(index &lt; 0 || index &gt; size())</code></p> </blockquote><p>dengan kata lain, memasukkan elemen selalu meningkatkan ukuran daftar dengan 1. anda dapat memasukkan di kedua ujung, atau di tengah ... tetapi anda tidak dapat memasukkan <em>lampau</em> akhir.</p><p><em>kapasitas</em> dari <code>arraylist</code> secara efektif merupakan detail implementasi - ia mengontrol kapan array pendukung perlu diganti dengan yang lebih besar untuk mengatasi lebih banyak elemen. <em>size</em> daftar adalah bagian penting di sini - daftar dengan kapasitas 100 tetapi ukuran 5 masih hanya daftar 5 elemen, dan memasukkan pada posisi 67 ke dalam daftar seperti itu tidak masuk akal.</p> dua himpunan a dan b dikatakan sama jika untuk setiap x anggota himpunan a maka x juga anggota himpunan b, dan sebaliknya. dengan kata lain a subset dari b dan b subset dari a, atau a dan b saling subset.

pada soal ini, himpunan x dan himpunan y adalah dua himpunan yang sama karena m, n, o, p anggota x dan juga anggota y. himpunan x dan himpunan y saling subset. <p>shared hosting berarti ada situs lain di server yang sama dengan anda berbagi hal-hal seperti bandwidth dan sumber daya. hosting khusus berarti anda satu-satunya di server dan semua sumber daya adalah milik anda. biasanya hosting khusus lebih mahal, tetapi memberikan kinerja yang lebih baik jika anda membutuhkannya.</p> <p>di linux, <code>top</code> sebenarnya mendukung pemfokusan pada satu proses, walaupun secara alami tidak memiliki grafik histori:</p><pre><code>top -p pid </code></pre><p>ini juga tersedia di mac os x dengan sintaks yang berbeda:</p><pre><code>top -pid pid </code></pre>