apa kekurangannya dengan menggunakan uuid atau guid sebagai kunci utama?
<p>saya ingin membangun sistem terdistribusi. saya perlu menyimpan data dalam database dan akan sangat membantu untuk menggunakan <a href="http://en.wikipedia.org/wiki/universally\_unique\_identifier"> uuid </a> atau <a href="http://en.wikipedia.org/wiki/globally\_unique\_identifier">[~ # ~] guid [[# #]]</a> sebagai kunci utama pada beberapa tabel. saya menganggap itu adalah kelemahan dengan desain ini karena uuid/guid cukup besar dan hampir acak. alternatifnya adalah dengan menggunakan int yang bertambah otomatis atau panjang.</p><p>apa kekurangannya dengan menggunakan uuid atau guid sebagai kunci utama untuk tabel saya?</p><p>saya mungkin akan menggunakan derby/javadb (di klien) dan postgresql (di server) sebagai dbms.</p>
<p><strong> tergantung pada fungsi generasi anda dan ukuran tabel akhir </strong></p><p>guid dimaksudkan untuk menjadi <em> unik secara global</em> pengidentifikasi. seperti yang dibahas dalam <a href="http://www.postgresql.org/docs/8.3/static/datatype-uuid.html">dokumentasi postgres 8.</a> tidak ada metodologi yang secara universal sesuai untuk menghasilkan pengidentifikasi ini, tetapi postgresql tidak mengirim dengan beberapa kandidat yang lebih berguna.</p><p>dari ruang lingkup masalah anda, dan kebutuhan untuk <em> offline</em> menulis, anda telah dengan rapi menghapus penggunaan apa pun selain guid, dan oleh karena itu tidak ada keuntungan kompensasi dari skema lain.</p><p>dari sudut pandang fungsional, panjang kunci biasanya tidak menjadi masalah pada segala jenis sistem modern, tergantung pada jumlah bacaan dan ukuran tabel. sebagai metodologi alternatif, klien offline dapat mengelompokkan catatan baru <em> tanpa</em> kunci utama dan cukup memasukkannya saat menghubungkan kembali. karena postgresql menawarkan tipe data "serial", klien tidak akan perlu menentukan id jika mereka dapat melakukan penulisan sederhana ke database.</p>
<p>untuk sedikit menghindari pertanyaan anda yang sebenarnya, hierarki <a href="http://codex.wordpress.org/template\_hierarchy#visual\_overview">template</a> memungkinkan anda untuk memiliki penangan khusus untuk id pos, kategori, istilah taksonomi, dll. itu mungkin cara tercepat untuk menyelesaikan masalah anda: cukup buat file templat berdiri sendiri dan hanya melayani permintaan ke satu pos (atau kategori, atau bagaimanapun surat penjualan diidentifikasi).</p><p>anda tidak perlu memanggil <code>get\_header()</code>, <code>get\_footer()</code> atau fungsi templat lainnya, jadi anda bebas memiliki struktur halaman yang sama sekali berbeda untuk satu posting di situs anda.</p> kata kunci merupakan sebuah kata atau konsep dengan keistimewaan, yang berarti kata apapun yang digunakan sebagai kunci dan kode untuk menghubungkan ke kata lain atau informasi lain. kata kunci pada blog terbagi menjadi dua yaitu:
 


 kata kunci pendek, yaitu kata kunci yang hanya terdiri dari maksimal dua suku kata.
 kata kunci panjang, yaitu kata kunci yang lebih dari dua suku kata.



dengan demikian, kata kunci hendaknya terdiri dari dua suku kata atau lebih dari dua suku kata. <blockquote> <p>apakah melewatkan id sesi sebagai parameter url benar-benar tidak aman?</p> </blockquote><p>meskipun tidak <em> secara inheren tidak aman </em>, ini bisa menjadi masalah kecuali kodenya dirancang dengan sangat baik.</p><p>katakanlah saya mengunjungi forum favorit saya. itu masuk saya dan menambahkan id sesi saya ke url di setiap permintaan. saya menemukan topik yang sangat menarik, dan menyalin &amp; menempel url ke pesan instan ke teman saya.</p><p>kecuali jika aplikasi telah mengambil langkah-langkah untuk memastikan bahwa ada <em> beberapa </em> bentuk validasi pada id sesi, teman yang mengklik tautan itu <em> dapat </em> mewarisi sesi saya, dan kemudian akan dapat melakukan apa pun yang dapat saya lakukan, seperti saya.</p><p>dengan menyimpan pengidentifikasi sesi di cookie, anda sepenuhnya menghilangkan masalah berbagi tautan.</p><p>ada variasi pada tema ini yang disebut <a href="http://en.wikipedia.org/wiki/session\_fixation">fixation sesi</a> , yang melibatkan <em> yang disengaja </em> berbagi pengidentifikasi sesi untuk tujuan jahat. artikel wikipedia yang ditautkan membahas tentang cara kerja serangan ini dan perbedaannya dari <em> berbagi </em> yang tidak disengaja dari pengidentifikasi sesi.</p><blockquote> <p>mengapa cookie lebih aman?</p> </blockquote><p>cookie <em> dapat </em> lebih aman di sini, karena mereka bukan sesuatu yang dapat disalin dan ditempelkan oleh pengguna normal, atau bahkan dilihat dan dimodifikasi. itu adalah standar yang jauh lebih aman.</p><blockquote> <p>kemungkinan apa yang dimiliki penyerang untuk kedua opsi?</p> </blockquote><p><em> baik </em> dari metode ini aman dari serangan man-in-the-middle melalui komunikasi yang tidak terenkripsi. add-on browser, spyware dan nasties sisi klien lainnya juga dapat memata-matai kedua metode penyimpanan pengidentifikasi sesi.</p><p>dalam kedua kasus, validasi sisi server bahwa klien yang mengklaim memiliki id sesi adalah praktik terbaik. terdiri dari apa validasi ini untuk diperdebatkan. perlu diingat bahwa pengguna di belakang proxy perusahaan dapat melompat di antara alamat ip antara permintaan, jadi mengunci sesi ke alamat ip dapat secara tidak sengaja mengasingkan orang. artikel <a href="http://en.wikipedia.org/wiki/session\_fixation">fixation sesi</a> menyebutkan beberapa alternatif bermanfaat lainnya.</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> <p>jika anda melihatnya dari sudut pandang pengembalian investasi (roi), masuk akal untuk menjadi penyedia openid kecuali anda memiliki basis pengguna yang besar. nilai perusahaan seperti google menjadi penyedia openid adalah bahwa mereka mendapatkan lebih banyak orang untuk mengunjungi situs mereka dan lebih banyak orang untuk berintegrasi dan bekerja dengan mereka.</p><p>ini mengimbangi biaya teknis, moneter, dan hukum yang merupakan biaya untuk menjadi penyedia openid. anda harus ingat bahwa anda harus membangun tim teknis untuk mengembangkan dan mengelola server openid anda, anda harus membayar banyak uang untuk membeli atau menyewa server yang akan selalu naik dan dapat menangani beban, dan akhirnya openid harus di. jika layanan openid google turun, orang tidak memiliki akses ke semua situs yang menggunakan openid. hal ini dapat menimbulkan konsekuensi hukum jika memerlukan biaya seseorang dan mereka berada di bawah tingkat layanan perjanjian mereka.</p><p>juga, ada masalah adopsi. so dan stack exchange hanya mempromosikan situs dan perusahaan tertentu untuk openid. jadi, kecuali jika situs anda ada dalam daftar pendek itu, orang tidak akan menyadari bahwa anda adalah pilihan dan mungkin memiliki lebih banyak masalah menggunakan sistem anda kecuali mereka secara teknis cerdas. memiliki tautan cepat di halaman so ke google telah membuat hidup saya 100 kali lebih mudah ketika mencoba masuk ke so, saya tahu itu.</p><p>akhirnya, seperti yang dikatakan orang lain, kebanyakan orang tidak akan mempercayai perusahaan mana pun yang akan ditutup. perusahaan-perusahaan level fortune 500 biasanya di mana orang menaruh kepercayaan pada hal-hal semacam ini karena meskipun perusahaan seperti google bangkrut, seseorang akan membelinya dan melanjutkan layanannya. ketika anda sampai ke perusahaan kecil ada banyak masalah.</p> <p><b>peningkatan utama grub 2 atas yang asli grub termasuk:</b></p><ul> <li>struktur file konfigurasi baru</li> <li>dukungan penulisan termasuk pernyataan dan fungsi kondisional</li> <li>memuat modul dinamis</li> <li>mode penyelamatan</li> <li>tema</li> <li>dukungan menu boot grafis dan peningkatan kemampuan splash</li> <li>boot ubuntu livecd dan beberapa gambar iso lainnya langsung dari hard drive</li> <li>dukungan platform non-x86 (seperti powerpc)</li> <li>dukungan universal untuk uuid (bukan hanya ubuntu)</li> <li>peningkatan internasionalisasi, termasuk dukungan untuk karakter non-ascii</li> </ul> <p>ini adalah masalah non-sepele yang hampir semua orang memiliki jawaban berbeda: tidak ada cara drupal kanonik untuk menangani pementasan ke dorongan produksi. dries buytaert, orang yang menjalankan pertunjukan drupal, menjadikannya salah satu <a href="http://buytaert.net/state-of-drupal-presentation-march-2011">inisiatif utama drupal 8</a> . tentu saja, drupal 7 baru saja dirilis, jadi akan butuh waktu sebelum itu menghasilkan buah.</p><p>masalahnya dapat dipecah menjadi dua masalah terpisah:</p><ul> <li>konfigurasi pementasan (variabel, tipe konten, bidang, tampilan, dll.)</li> <li>pementasan konten (node, pengguna, dll.)</li> </ul><p>yang pertama dapat sebagian besar ditangani oleh modul <a href="http://drupal.org/project/features">fitur</a> , yang akan mengambil konfigurasi situs anda dan mengubahnya menjadi modul yang dapat anda tambahkan ke instalasi drupal anda: dengan cara ini, anda dapat menambahkannya ke sistem kontrol versi anda dan tidak perlu khawatir akan meledak ketika anda memigrasi konten anda.</p><p>yang terakhir ini sangat rumit, karena di situs yang aktif, kemungkinan konten akan berubah pada produksi bahkan setelah anda melakukan sinkronisasi awal dengan lingkungan pengembangan anda. ini mencegah penggantian konten secara grosir selama pementasan seperti yang dapat anda lakukan dengan konfigurasi.</p><p>selain itu, drupal tidak menggunakan pengidentifikasi unik universal (uuid) untuk konten: setiap kali node atau pengguna ditambahkan, id bertambah satu. jadi, apa yang mungkin node 45 di situs pengembangan anda mungkin node 90 di situs produksi anda.</p><p>sayangnya, saya tidak punya solusi yang bagus untuk ini: pementasan konten adalah kelemahan drupal. apa yang saya pribadi lakukan adalah menambahkan konten hanya di situs produksi. jika klien ingin melihat bagaimana konten terlihat sebelum ditayangkan, saya akan membuat klon dari situs produksi yang hanya dapat diakses oleh klien. kemudian, setelah disetujui, perubahan yang sama kemudian dilakukan langsung ke produksi.</p><p>ada alternatif lain yang dilemparkan: modul <a href="http://drupal.org/project/deploy">deploy</a> . seharusnya meningkatkan <a href="http://drupal.org/project/services">layanan</a> untuk membuat konten pementasan relatif tidak menyakitkan. tapi saya tidak bisa menjamin keefektifannya dan tidak memiliki versi drupal 7.</p> <p>pasang disk menggunakan udev. tempatkan aturan dari ini <a href="http://wiki.archlinux.org/index.php/udev#mount\_under\_.2fmedia.3b\_use\_partition\_label\_if\_present.3b\_support\_luks\_encryption">wiki</a> ke <code>/etc/udev/user.rules</code> dan reboot (atau sambungkan kembali hdd usb). ada beberapa bantuan aturan di wiki (itulah sebabnya saya tidak mencantumkannya di sini), pilih salah satu yang paling sesuai dengan kebutuhan anda (mis. anda memerlukan pengguna normal tertentu untuk dapat melepasnya).</p><p>membaca dengan teliti <code>/lib/udev/rules.d/80-udisks.rules</code> akan membantu anda memahami apa yang udev lakukan terhadap <strong> hard disk </strong> anda.</p><p>selain aturan udev yang saya sebutkan di atas saya pikir ada pendekatan lain yang dapat anda ambil: menginstruksikan udisks (melalui udev) untuk meninggalkan disk anda sendiri dan kemudian memasangnya melalui fstab.</p><p>kode ini berfungsi di sistem saya</p><pre><code>action!="add|change", goto="my\_udisks\_end" subsystem!="block", goto="my\_udisks\_end" env{id\_type}!="disk", goto="my\_udisks\_end" env{id\_bus}!="ata", goto="my\_udisks\_end" env{devtype}!="partition", goto="my\_udisks\_end" kernel=="sd*|hd*", env{udisks\_presentation\_nopolicy}="1" label="my\_udisks\_end" </code></pre><p>tetapi generik dan mencakup semua partisi. untuk dapat menargetkan hdd/partisi khusus anda gunakan <code>udevadm info --query=all -n /dev/sdx</code> dan kemudian cocokkan dengan beberapa atribut tertentu dalam aturan udev.</p><p>sumber yang bagus untuk membantu anda dalam hal ini adalah <a href="http://reactivated.net/writing\_udev\_rules.html">menulis aturan udev</a> . sayangnya itu berisi beberapa info yang ketinggalan zaman (<code>udevinfo</code> digantikan oleh <code>udevadm indo</code>). saya yakinkan anda, meskipun, ini adalah bacaan yang bermanfaat - udev adalah bagian utama dari arsitektur saat ini dan anda dapat mencapai banyak hal dengan menggunakannya. ini juga cukup fleksibel.</p><p>mudah juga untuk membuat kesalahan dalam aturan udev :). gunakan <code>udevadm test $(udevadm info -q path -n /dev/sdx)</code> untuk mengintip apa yang udev lakukan.</p> <p>efeknya pada g\_qcount sama, tetapi apa yang dilakukan berbeda.</p><p>bagian kritis openmp sepenuhnya umum - ia dapat mengelilingi setiap blok kode yang berubah-ubah. anda membayar untuk generalitas itu, bagaimanapun, dengan mengeluarkan overhead yang signifikan setiap kali sebuah thread masuk dan keluar dari bagian kritis (di atas biaya inheren serialisasi).</p><p>(selain itu, dalam openmp semua bagian penting yang tidak disebutkan namanya dianggap identik (jika anda mau, hanya ada satu kunci untuk semua bagian penting yang tidak disebutkan namanya), sehingga jika satu utas berada dalam satu bagian kritis [tidak dinamai] seperti di atas, tidak ada utas yang dapat memasukkan apa pun bagian kritis [tidak disebutkan namanya] seperti yang anda duga, anda dapat menyiasatinya dengan menggunakan bagian kritis yang bernama).</p><p>operasi atom memiliki overhead yang jauh lebih rendah. jika tersedia, perangkat ini memanfaatkan perangkat keras yang menyediakan (misalnya) operasi penambahan atom; dalam hal itu tidak ada kunci/buka kunci yang diperlukan untuk memasukkan/keluar dari baris kode, itu hanya melakukan penambahan atom yang perangkat keras memberitahu anda tidak dapat diganggu.</p><p>sisi baiknya adalah bahwa overhead jauh lebih rendah, dan satu thread berada dalam operasi atom tidak menghalangi operasi atom (berbeda) yang akan terjadi. kelemahannya adalah serangkaian operasi terbatas yang didukung oleh atom.</p><p>tentu saja, dalam kedua kasus tersebut, anda harus mengeluarkan biaya serialisasi.</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>