Cara terbaik untuk memperbarui daftar sortir drag-and-drop Anda melalui skema database Oleh omgzui | Juni 2022

Programming

[ad_1]
Welcome Gaes di suratpembaca.web.id. Siang ini kita akan mengupas tentang Linux yaitu Cara terbaik untuk memperbarui daftar sortir drag-and-drop Anda melalui skema database Oleh omgzui | Juni 2022

.

Mudah-mudahan artikel mengenai Cara terbaik untuk memperbarui daftar sortir drag-and-drop Anda melalui skema database Oleh omgzui | Juni 2022

bisa memberikan manfaat bagi Teman-teman semua. Yuk baca postingan ini
sampai tuntas.

Gunakan kekuatan SQL

Di tempat kerja, saat mengembangkan dan mengelola latar belakang, kita sering menghadapi kebutuhan untuk “penyortiran seret dan lepas”. Misalnya, ada daftar sumber daya, dan urutan sumber daya dapat diubah dengan menyeret dan menjatuhkan di bagian depan – seperti yang ditunjukkan di atas (gambar header).

Cara menjalankan fungsi ini dalam proyek kami adalah bahwa tabel sumber memiliki bidang posisi. Saat kueri front-end dilakukan, bidang diurutkan dalam urutan menaik atau menurun, dan nilai bidang mengubah posisi rekaman yang terlibat dalam tabel saat menyeret.

Namun, ada masalah dengan solusi ini: kami hanya menarik dan melepas satu rekaman pada satu waktu, tetapi kami melakukannya. UPDATE Operasi pada banyak record Apakah ada solusi yang lebih baik? Berikut adalah dua solusi yang saya pikirkan.

Skema 1: Array

Setel bidang posisi di tabel sumber daya untuk memperlihatkan posisi rekaman. MySQL DDL adalah sebagai berikut:

Urutkan menurut posisi ASC atau DESC saat bagian depan daftar data mencari:

Saat menyeret catatan, bagian depan melewati nilai ID catatan dan nilai posisi baru newPositionDan server menanyakan nilai posisi asli sumber (oldPosition) Menurut pengidentifikasi dan membandingkan oldPosition Dan newPositionYang dibagi menjadi tiga mode berikut:

1. oldPosition == newPosition

Perawatan: Tetap sama

2. oldPosition ≠ newPosition

oldPosition < newPosition: Tarik kembali rekamannya
oldPosition > newPosition: Mendorong catatan ke depan

Rentang data yang akan dimodifikasi adalah: Untuk semua record dengan position >= newPositionTambahkan 1 ke nilai posisi data ini. Ungkapan MySQL adalah sebagai berikut:

Masalah yang ada

Banyak baris data yang dimodifikasi setiap kali Anda menarik dan melepas. Jika Anda menyeret dan melepaskan rekaman ke baris pertama, Anda harus mengubah nilai posisi semua data tabel, dan kunci tabel (kunci X) ditambahkan ke tabel data, yang menghasilkan operasi database secara bersamaan. Mengurangi.

Alasan untuk masalah ini adalah bahwa metode ini pada dasarnya mengatur data ke dalam “struktur array”. Setiap kali Anda menarik dan melepaskan catatan, itu sama dengan menempatkan elemen di posisi tertentu dalam larik.

Sifat array adalah sebagai berikut: Saat menyisipkan elemen, elemen di belakang posisi penyisipan dipindahkan ke belakang sama sekali. Seperti yang ditunjukkan pada gambar di bawah, ketika elemen 10 berada di posisi 2, elemen di posisi 2 dan selanjutnya harus dipindahkan ke belakang:

Skema 2: Daftar Tautan Ganda

Dibandingkan dengan array, linked list lebih cocok untuk menyisipkan elemen. Setiap kali Anda memasukkan elemen, Anda hanya perlu memindahkan penanda depan dan belakang elemen. Seperti yang ditunjukkan pada gambar di bawah, untuk menempatkan NewNode antara Node1 dan Node2, Anda hanya perlu mengubah penanda depan dan belakang dari tiga item:

Dalam database, kami menambahkan dua bidang, prevId Dan siblingId, Yang masing-masing menunjukkan indikator depan dan belakang. DDL adalah sebagai berikut:

Karena hubungan antara catatan dibuat oleh penanda maju dan mundur, menyeret dibagi menjadi dua kategori: menyeret catatan di belakang catatan dan menyeretnya ke depan catatan pertama, sehingga dua mode berikut diperkenalkan secara terpisah.

Pindah Setelah

Bagian depan masuk ke catatan dan ID barunya prevIdDan back-end memperbarui data yang sesuai id Dan prevId. Proses pembaruan adalah sebagai berikut:

  1. Kueri data rekaman saat ini berdasarkan ID currentData
  2. Pointer terdaftar sebelum dan sesudah pembaruan currentData
  3. Kueri data rekaman sebelumnya prevData Menurut prevId
  4. Sesuaikan penanda prevData Dan petunjuk ke catatan masa depan

Setelah menyeret record ke record, Anda hanya perlu melakukan operasi UPDATE hingga 6 kali.

Pindah sebelum

Bagian depan melewati ID sumber dan itu siblingIdDan back-end memperbarui data yang sesuai id Dan siblingId. Proses pembaruan adalah sebagai berikut:

  1. Kueri data rekaman saat ini berdasarkan ID currentData
  2. Pointer terdaftar sebelum dan sesudah pembaruan currentData
  3. Memperbarui prevId Berdasarkan catatan terbaru siblingId
  4. Memperbarui currentData sliblingId

Sebelum menyeret catatan ke yang pertama, hanya 4 UPDATE Operasi diperlukan.

Seseorang bisa mendapatkan nomor itu UPDATE Catatan yang akan dijalankan untuk setiap operasi seret (hingga 6 kali UPDATE, Yang mempengaruhi 5 catatan) rata-rata kurang dari Gambar 1. Dan Skema 2 ditambahkan ke tabel data Ini adalah kunci baris, dan efeknya pada kinerja database simultan kurang dari Skema 1.

Masalah yang ada

Meskipun Skema 2 bagus untuk menyisipkan catatan, skema ini juga memiliki kelemahan dari daftar tertaut: tidak cocok untuk pencarian navigasi. Sebuah catatan pertama-tama harus ditanyakan dari daftar tertaut, dan kemudian catatan berikutnya harus secara konsisten dicocokkan dengan siblingId. Catatan Skema 2 hanya cocok untuk skenario “kueri lengkap” dan tidak dapat diurutkan dan diberi halaman berdasarkan situasi seperti Skema 1.

Dua implementasi back-end dari penyortiran drag-and-drop diperkenalkan:
1. Tata letak struktur array: Penyisipan dan pembaruan kinerja yang buruk, kueri yang mudah
2. Tata letak daftar tautan ganda: Sisipkan dan perbarui kinerja tinggi dan kueri membutuhkan lebih banyak pemrosesan

Di perusahaan saya, rencana 1 adalah cara terbaik.

Itu tadi materi tentang Cara terbaik untuk memperbarui daftar sortir drag-and-drop Anda melalui skema database Oleh omgzui | Juni 2022

, terimakasih telah berkunjung di website saya, mudah-mudahan postingannya ada manfaatnya ya.

[ad_2]

Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.