Jadual Kandungan
Kandungan soalan
Penyelesaian
Bahagian konsep
Berdagang
Kunci storan kv
Pengekodan
Rumah pembangunan bahagian belakang Golang Bagaimanakah kunci di KV Store dikunci?

Bagaimanakah kunci di KV Store dikunci?

Feb 09, 2024 pm 01:20 PM
akses serentak

KV Store 中的密钥是如何锁定的?

editor php Zimo akan mendedahkan rahsia kunci kunci di KV Store untuk anda. Di Kedai KV, penguncian kunci dicapai melalui satu siri algoritma dan teknologi yang kompleks. Pertama, sistem menjana pengecam unik untuk setiap kunci dan menyimpannya dengan nilai yang sepadan dalam pangkalan data. Pada masa yang sama, sistem juga akan menggunakan fungsi cincang untuk menyulitkan kunci bagi memastikan keselamatannya. Selain itu, sistem juga menggunakan senarai kawalan capaian (ACL) untuk menyekat akses kepada kunci supaya hanya pengguna yang diberi kuasa boleh melakukan operasi baca dan tulis. Melalui langkah keselamatan ini, KV Store memastikan keselamatan dan kebolehpercayaan kunci serta menyediakan perkhidmatan penyimpanan data yang selamat dan boleh dipercayai kepada pengguna.

Kandungan soalan

Saya sedang membina kedai kv teragih hanya untuk mengetahui lebih lanjut tentang sistem teragih dan konkurensi. Pelaksanaan storan kv yang saya bina adalah transaksional sepenuhnya, dengan log transaksi dalam ingatan. Untuk memastikan perkara mudah, storan juga berada dalam ingatan sepenuhnya. Api adalah awam getinsertupdateremove. Ambil perhatian bahawa semua titik akhir beroperasi pada satu kunci, bukan julat kunci.

Saya menguruskan konkurensi melalui kunci. Walau bagaimanapun, saya mempunyai kunci global yang mengunci keseluruhan stor data. Bunyi ini sangat tidak cekap, kerana jika saya ingin mengemas kini nilai k2 时读取 k1 , saya perlu menunggu sehingga k2 selesai mengemas kini, walaupun itu tidak relevan.

Saya tahu sesetengah pangkalan data menggunakan penguncian yang lebih halus. Sebagai contoh, dalam pelayan mysql terdapat kunci peringkat baris. Bagaimana untuk melaksanakan penguncian peringkat kunci?

Saya ada

type storage struct {
  store map[string]int32
}
Salin selepas log masuk

Perlukah saya menambah sesuatu seperti ini? :

type Storage struct {
  store map[string]int32
  locks map[string]mutex.Lock
}
Salin selepas log masuk

Jika saya melakukan ini, masalahnya ialah locks 必须与 store 保持同步。另一种选择是合并两个映射,但即便如此,如果 remove 请求出现在 get sebelum ini, saya juga mengalami masalah memadamkan entri dalam peta pada kunci.

Penyelesaian

Bahagian konsep

Berdagang

Pertama sekali, konsistensi yang kuat tidak memerlukan log transaksi. Log transaksi berguna untuk mengekalkan sifat asid.

Transaksi juga bukan satu keperluan yang ketat untuk konsistensi yang kukuh dalam pangkalan data, tetapi ia boleh menjadi alat yang berguna untuk memastikan konsistensi dalam banyak situasi.

Konsistensi yang kukuh merujuk kepada sifat yang memastikan bahawa semua bacaan daripada pangkalan data akan mengembalikan penulisan terkini, tidak kira di mana operasi baca dilakukan. Dalam erti kata lain, konsistensi yang kukuh menjamin bahawa semua pelanggan akan melihat data yang sama dan bahawa data itu akan dikemas kini dan konsisten di seluruh sistem.

Anda boleh menggunakan algoritma konsensus seperti paxos atau raft untuk memastikan konsistensi yang kukuh. Apabila menyimpan data, anda boleh menyimpan versi data dan menggunakannya sebagai id dalam paxos.

Kunci storan kv

Dalam stor nilai kunci (kv), kunci biasanya dikunci menggunakan beberapa jenis mekanisme penguncian, seperti kunci mutex atau pembaca-penulis (seperti yang dicadangkan @paulsm4). Ini membolehkan berbilang rangkaian atau proses mengakses dan mengubah suai data dalam stor kv secara serentak sambil memastikan data kekal konsisten dan betul.

Sebagai contoh, apabila benang atau proses ingin membaca atau mengubah suai kunci tertentu dalam kedai kv, ia boleh memperoleh kunci pada kunci itu. Ini menghalang urutan atau proses lain daripada mengubah suai kunci yang sama pada masa yang sama, menyebabkan keadaan perlumbaan dan masalah lain. Setelah utas atau proses selesai membaca atau mengubah suai kunci, kunci boleh dilepaskan, membenarkan utas atau proses lain mengakses kunci.

Butiran khusus tentang cara mengunci kunci dalam storan kv mungkin berbeza-beza bergantung pada pelaksanaan storan kv. Sesetengah kedai kv mungkin menggunakan kunci global (seperti yang anda sudah lakukan, yang kadangkala tidak cekap) untuk mengunci keseluruhan stor data, manakala kedai kv lain mungkin menggunakan mekanisme penguncian yang lebih halus seperti kunci peringkat baris atau Kunci peringkat kunci untuk membenarkan lebih banyak operasi. Akses serentak kepada data.

Jadi, tldr; secara konsep, anda betul. Masalahnya terletak pada butiran pelaksanaan penguncian.

Pengekodan

Untuk menjawab soalan tentang penguncian dengan tegas, pertimbangkan Kunci Pembaca seperti yang dicadangkan @paulsm4. Dalam golang, kunci yang serupa ialah rwmutexrwmutex。它用于 sync。 map. Ia digunakan untuk sync. peta.

Berikut adalah contoh ringkas:

type Storage struct {
  store sync.Map // a concurrent map
}

// GET retrieves the value for the given key.
func (s *Storage) GET(key string) (int32, error) {
  // Acquire a read lock for the key.
  v, ok := s.store.Load(key)
  if !ok {
    return 0, fmt.Errorf("key not found: %s", key)
  }

  // Return the value.
  return v.(int32), nil
}

// INSERT inserts the given key-value pair into the data store.
func (s *Storage) INSERT(key string, value int32) error {
  // Acquire a write lock for the key.
  s.store.Store(key, value)
  return nil
}

// UPDATE updates the value for the given key.
func (s *Storage) UPDATE(key string, value int32) error {
  // Acquire a write lock for the key.
  s.store.Store(key, value)
  return nil
}

// REMOVE removes the key-value pair for the given key from the data store.
func (s *Storage) REMOVE(key string) error {
  // Acquire a write lock for the key.
  s.store.Delete(key)
  return nil
}
Salin selepas log masuk

Selain itu, anda memerlukan paxos untuk memastikan konsistensi antara replika.

Atas ialah kandungan terperinci Bagaimanakah kunci di KV Store dikunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memastikan keselamatan benang pembolehubah tidak menentu dalam fungsi Java? Bagaimana untuk memastikan keselamatan benang pembolehubah tidak menentu dalam fungsi Java? May 04, 2024 am 10:15 AM

Kaedah untuk memastikan keselamatan benang bagi pembolehubah tidak menentu di Jawa: Keterlihatan: Pastikan pengubahsuaian kepada pembolehubah tidak menentu oleh satu utas dapat dilihat dengan serta-merta kepada utas lain. Atomicity: Pastikan bahawa operasi tertentu pada pembolehubah tidak menentu (seperti menulis, membaca dan pertukaran perbandingan) tidak boleh dibahagikan dan tidak akan diganggu oleh urutan lain.

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? May 07, 2024 pm 12:39 PM

Perangkap dalam Bahasa Go Semasa Merekabentuk Sistem Teragih Go ialah bahasa popular yang digunakan untuk membangunkan sistem teragih. Walau bagaimanapun, terdapat beberapa perangkap yang perlu diberi perhatian apabila menggunakan Go yang boleh menjejaskan kekukuhan, prestasi dan ketepatan sistem anda. Artikel ini akan meneroka beberapa perangkap biasa dan memberikan contoh praktikal tentang cara mengelakkannya. 1. Terlalu banyak menggunakan concurrency Go ialah bahasa concurrency yang menggalakkan pembangun menggunakan goroutine untuk meningkatkan paralelisme. Walau bagaimanapun, penggunaan konkurensi yang berlebihan boleh menyebabkan ketidakstabilan sistem kerana terlalu banyak gorout bersaing untuk mendapatkan sumber dan menyebabkan overhed penukaran konteks. Kes praktikal: Penggunaan concurrency yang berlebihan membawa kepada kelewatan respons perkhidmatan dan persaingan sumber, yang ditunjukkan sebagai penggunaan CPU yang tinggi dan overhed kutipan sampah yang tinggi.

Panduan untuk menguji unit fungsi serentak Go Panduan untuk menguji unit fungsi serentak Go May 03, 2024 am 10:54 AM

Unit menguji fungsi serentak adalah penting kerana ini membantu memastikan kelakuan mereka yang betul dalam persekitaran serentak. Prinsip asas seperti pengecualian bersama, penyegerakan dan pengasingan mesti dipertimbangkan semasa menguji fungsi serentak. Fungsi serentak boleh diuji unit dengan mensimulasikan, menguji keadaan perlumbaan dan mengesahkan keputusan.

Cara menyelesaikan masalah pelayan yang sibuk untuk DeepSeek Cara menyelesaikan masalah pelayan yang sibuk untuk DeepSeek Mar 12, 2025 pm 01:39 PM

DeepSeek: Bagaimana menangani AI yang popular yang sesak dengan pelayan? Sebagai AI panas pada tahun 2025, DeepSeek adalah sumber percuma dan terbuka dan mempunyai prestasi yang setanding dengan versi rasmi OpenAIO1, yang menunjukkan popularitinya. Walau bagaimanapun, kesesuaian yang tinggi juga membawa masalah kesibukan pelayan. Artikel ini akan menganalisis sebab -sebab dan menyediakan strategi mengatasi. DeepSeek Web Version Masuk: https://www.deepseek.com/deepseek Server Sibuk Sebab: Akses serentak yang tinggi: Ciri -ciri percuma dan berkuasa DeepSeek menarik sejumlah besar pengguna untuk digunakan pada masa yang sama, mengakibatkan beban pelayan yang berlebihan. Serangan Siber: Dilaporkan bahawa DeepSeek mempunyai kesan terhadap industri kewangan AS.

Mekanisme penguncian dan penyegerakan fungsi C++ dalam pengaturcaraan serentak? Mekanisme penguncian dan penyegerakan fungsi C++ dalam pengaturcaraan serentak? Apr 27, 2024 am 11:21 AM

Kunci fungsi dan mekanisme penyegerakan dalam pengaturcaraan serentak C++ digunakan untuk mengurus akses serentak kepada data dalam persekitaran berbilang benang dan menghalang persaingan data. Mekanisme utama termasuk: Mutex (Mutex): primitif penyegerakan peringkat rendah yang memastikan bahawa hanya satu utas mengakses bahagian kritikal pada satu masa. Pembolehubah keadaan (ConditionVariable): membenarkan benang menunggu syarat dipenuhi dan menyediakan komunikasi antara benang. Operasi atom: Operasi arahan tunggal, memastikan kemas kini satu-benang pembolehubah atau data untuk mengelakkan konflik.

Bagaimana untuk mengembalikan penunjuk dalam golang? Bagaimana untuk mengembalikan penunjuk dalam golang? Apr 23, 2024 pm 02:09 PM

Petunjuk pengembalian dalam Go membolehkan akses terus kepada data mentah. Sintaks untuk mengembalikan penuding adalah menggunakan jenis awalan asterisk, contohnya: funcgetPointer()int{varxint=10;return&x}. Penunjuk boleh digunakan untuk memperuntukkan data secara dinamik, menggunakan fungsi baharu dan membatalkan penunjuk untuk menetapkan nilai. Petunjuk pulangan harus memberi perhatian kepada keselamatan, pengalianan dan kesesuaian bersamaan.

Bagaimana untuk menggunakan kelas atom dalam fungsi Java concurrency dan multi-threading? Bagaimana untuk menggunakan kelas atom dalam fungsi Java concurrency dan multi-threading? Apr 28, 2024 pm 04:12 PM

Kelas atom ialah kelas selamat benang di Java yang menyediakan operasi tanpa gangguan dan penting untuk memastikan integriti data dalam persekitaran serentak. Java menyediakan kelas atom berikut: AtomicIntegerAtomicLongAtomicReferenceAtomicBoolean Kelas ini menyediakan kaedah untuk mendapatkan, menetapkan dan membandingkan nilai untuk memastikan bahawa operasi adalah atom dan tidak akan diganggu oleh benang. Kelas atom berguna apabila bekerja dengan data kongsi dan mencegah rasuah data, seperti mengekalkan akses serentak ke kaunter kongsi.

Bagaimana untuk melaksanakan struktur data bebas kunci dalam pengaturcaraan serentak Java? Bagaimana untuk melaksanakan struktur data bebas kunci dalam pengaturcaraan serentak Java? May 02, 2024 am 10:21 AM

Struktur data tanpa kunci dalam pengaturcaraan serentak Java Dalam pengaturcaraan serentak, struktur data tanpa kunci adalah penting, membenarkan berbilang urutan mengakses dan mengubah suai data yang sama secara serentak tanpa memperoleh kunci. Ini meningkatkan prestasi aplikasi dan daya pemprosesan dengan ketara. Artikel ini akan memperkenalkan struktur data bebas kunci yang biasa digunakan dan pelaksanaannya dalam Java. Operasi CAS Bandingkan-dan-Tukar (CAS) ialah teras struktur data tanpa kunci. Ia ialah operasi atom yang mengemas kini pembolehubah dengan membandingkan nilai semasa dengan nilai yang dijangkakan. Jika nilai pembolehubah adalah sama dengan nilai yang dijangkakan, kemas kini berjaya jika tidak, kemas kini gagal. Baris gilir tanpa kunci ConcurrentLinkedQueue ialah baris gilir tanpa kunci, yang dilaksanakan menggunakan struktur berasaskan senarai terpaut. Ia menyediakan sisipan dan pemadaman yang cekap

See all articles