Rumah pangkalan data tutorial mysql 网站建设中数据库锁使用技巧

网站建设中数据库锁使用技巧

Jun 07, 2016 pm 05:37 PM
Petua pangkalan data laman web

无论是网站建设还是任何其它系统项目中使用的数据流,锁是数据库不可分割的一部分,有了数据库锁,数据才能够在允许并发请求存在的同时,还能确保数据库ACID属性中的一致性和隔离性。但是,数据库锁有很多种,甚至连实现它们的方法也有很多种。下表中对各种

    无论是网站建设还是任何其它系统项目中使用的数据流,锁是数据库不可分割的一部分,有了数据库锁,数据才能够在允许并发请求存在的同时,还能确保数据库ACID属性中的一致性和隔离性。但是,数据库锁有很多种,甚至连实现它们的方法也有很多种。下表中对各种开源数据库系统和第三方专有的数据库系统支持的各种锁类型进行了概述。

 

锁类型

说明

隐式锁

是数据库代表请求生成的,用于执行某些事务的锁。通常是必要时为某些DML(数据操作语言)任务完成的。

显示锁

用户在与数据库中的实体交互时定义的锁,有用户自定义。

行锁

可以锁住数据库表中正在被更新,被读或被创建中的一行,防止当前行数据被多个并发请求更改引起数据的不稳定状态。

页锁

可以锁住具有正在被更新的行或行组的分页,只有在数据表分页的表中才存在。

范围锁

通常,这种锁锁住的一组是分页。在添加数据库空间时,这种锁很常见。

表锁

锁住整个表,也就是锁住数据库中的一个实体。

数据库锁

锁住整个数据库中所有的表和关系,这也是数据库中最大范围和最危险的锁,慎用!

         搜索一下,你就会发现各种类型的锁。根据数据库的类型,主关键字和索引锁可以锁住在表上创建的索引。通常网站建设人员还会发现关于锁的讨论,以及不同数据库支持各种锁的方法。据我们对部分深圳网站建设公司的调查和了解,很少公司真的会用到这么多类型的锁,即使数据库支持它们,在行业内也很少会用到。

         虽然锁对数据库实现一致性和隔离性至关重要,但显然一些锁的使用成本很高。这个使用成本是由锁的范围决定的,比如表锁,会将整个数据表锁住,在表被锁住的时间里其他任何对这个表的请求都将被拒绝,这意味着其它用户必须等待,直到这个表的锁被释放出来。因此,锁的使用成本就是整个网站对数据库中被锁数据的使用等待时间,这个等待时间直接影响到了网站用户的使用时间,流畅度和用户体验,因此数据库锁的使用是要以网站建设的用户体验作为代价的。

通常,数据库是允许并发式的数据读取的,但在写数据的过程中会阻止所有的读操作。读操作一般会发生得很快,也在瞬间完成,所以许多读操作可以同时发生,但写操作就通常是在隔离的状态下进行的。写操作的颗粒度越精细,例如只写一行,那么在数据库中甚至在表中能同时发生的写操作就多。提高被写或更新的对象颗粒度,如同时更新多个行,就可能需要提高必要的锁类型,也就是提高锁的作用范围。

在网站建设项目中,,采用的数据库锁的大小或粒度最终会影响事务的吞吐量。如果同时更新数据库中的多个行,那么获得多个锁的成本和对这些行的竞争会造成每秒处理的事务量比只获得更大粒度的锁要少。但如果采用的锁范围太大,例如在只需要更新很少几行数据的情况下采用了页锁,那么在锁定的期间,事务的吞吐量也会降低的。

         通常,网站建设数据库的一个组件决定了采用的粒度,在允许最大并发性的同时,还能确保一致性和隔离性。在大多的情况下,最初采用这个组件决定什么需要被锁住是最好的方案。数据库的这个组件在运行时比网站建设人员更清楚哪些是可能被更新的。遗憾的是,这些系统一定会出错,这就是为什么一定要监控生成环境中的数据库,当从生成环境中了解到发生了什么时,要修改我们的DML使得它们更加有效。

         网站建设中使用的大多数数据库都具有收集性能统计信息的功能,从中我们可以了解到最常见的锁定条件以及造成事务在处理前等待的最常见事件。通过分析历史信息,并且积极地监控生成环境中的事件,我们就能发现某种类型的锁使用得不对,强制性地使数据库采用正确类型的锁。例如,如果通过分析,我们发现数据库总是对某个特定的表使用锁,而我们认为采用行锁会得到更大的并发性,那么就必须强行更改。

         与分析瓶颈同样重要,网站建设人员应该分析是否可以通过修改实体和外键关系来减少争用,提高并发性。数据库的横向扩展是解决这类问题的较好方法,也就是将读操作分布到数据库的多个只读副本上,而只在一个主数据库上进行写操作。当然也可以根据部分的争用问题,将表分布到多个数据库中,这属于数据库的纵向扩展。最后,我们也可以把客户的详细数据分放在多个表中,从而减少表的大小,把争用分布到多个实体上。

         最后,在采用数据库的网站建设项目中,应该确保选中了最佳的解决方案。我们一再对深圳网站建设公司强调,你能用任何技术对几乎任何产品进行扩展。也就是说,我们做的大多数决定会对网站建设项目或产品的上市时间造成影响。例如,有的数据库存储引擎解决方案限制了数据库中可以采用的锁类型,从而就限制了数据库的调优能力,不能最大化并发的事务数了。MySql就是一个例子,如果选择了MyISAM作为存储引擎,就会限制表级的锁,从而可能会限制事务的吞吐量。

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

iOS 18 menambah fungsi album 'Dipulihkan' baharu untuk mendapatkan semula foto yang hilang atau rosak iOS 18 menambah fungsi album 'Dipulihkan' baharu untuk mendapatkan semula foto yang hilang atau rosak Jul 18, 2024 am 05:48 AM

Keluaran terbaharu Apple bagi sistem iOS18, iPadOS18 dan macOS Sequoia telah menambah ciri penting pada aplikasi Photos, yang direka untuk membantu pengguna memulihkan foto dan video yang hilang atau rosak dengan mudah disebabkan pelbagai sebab. Ciri baharu ini memperkenalkan album yang dipanggil "Dipulihkan" dalam bahagian Alat pada apl Foto yang akan muncul secara automatik apabila pengguna mempunyai gambar atau video pada peranti mereka yang bukan sebahagian daripada pustaka foto mereka. Kemunculan album "Dipulihkan" menyediakan penyelesaian untuk foto dan video yang hilang akibat kerosakan pangkalan data, aplikasi kamera tidak disimpan ke pustaka foto dengan betul, atau aplikasi pihak ketiga yang menguruskan pustaka foto. Pengguna hanya memerlukan beberapa langkah mudah

Bagaimanakah Hibernate melaksanakan pemetaan polimorfik? Bagaimanakah Hibernate melaksanakan pemetaan polimorfik? Apr 17, 2024 pm 12:09 PM

Pemetaan polimorfik hibernate boleh memetakan kelas yang diwarisi ke pangkalan data dan menyediakan jenis pemetaan berikut: subkelas bercantum: Cipta jadual berasingan untuk subkelas, termasuk semua lajur kelas induk. table-per-class: Cipta jadual berasingan untuk subkelas, yang mengandungi hanya lajur khusus subkelas. union-subclass: serupa dengan joined-subclass, tetapi jadual kelas induk menggabungkan semua lajur subclass.

Tutorial terperinci tentang mewujudkan sambungan pangkalan data menggunakan MySQLi dalam PHP Tutorial terperinci tentang mewujudkan sambungan pangkalan data menggunakan MySQLi dalam PHP Jun 04, 2024 pm 01:42 PM

Cara menggunakan MySQLi untuk mewujudkan sambungan pangkalan data dalam PHP: Sertakan sambungan MySQLi (require_once) Cipta fungsi sambungan (functionconnect_to_db) Fungsi sambungan panggilan ($conn=connect_to_db()) Laksanakan pertanyaan ($result=$conn->query()) Tutup sambungan ( $conn->close())

Apr 09, 2024 pm 12:36 PM

HTML tidak boleh membaca pangkalan data secara langsung, tetapi ia boleh dicapai melalui JavaScript dan AJAX. Langkah-langkah termasuk mewujudkan sambungan pangkalan data, menghantar pertanyaan, memproses respons dan mengemas kini halaman. Artikel ini menyediakan contoh praktikal menggunakan JavaScript, AJAX dan PHP untuk membaca data daripada pangkalan data MySQL, menunjukkan cara untuk memaparkan hasil pertanyaan secara dinamik dalam halaman HTML. Contoh ini menggunakan XMLHttpRequest untuk mewujudkan sambungan pangkalan data, menghantar pertanyaan dan memproses respons, dengan itu mengisi data ke dalam elemen halaman dan merealisasikan fungsi HTML membaca pangkalan data.

Bagaimana untuk mengendalikan ralat sambungan pangkalan data dalam PHP Bagaimana untuk mengendalikan ralat sambungan pangkalan data dalam PHP Jun 05, 2024 pm 02:16 PM

Untuk mengendalikan ralat sambungan pangkalan data dalam PHP, anda boleh menggunakan langkah berikut: Gunakan mysqli_connect_errno() untuk mendapatkan kod ralat. Gunakan mysqli_connect_error() untuk mendapatkan mesej ralat. Dengan menangkap dan mengelog mesej ralat ini, isu sambungan pangkalan data boleh dikenal pasti dan diselesaikan dengan mudah, memastikan kelancaran aplikasi anda.

Bagaimana untuk menyambung ke pangkalan data jauh menggunakan Golang? Bagaimana untuk menyambung ke pangkalan data jauh menggunakan Golang? Jun 01, 2024 pm 08:31 PM

Melalui pakej pangkalan data/sql perpustakaan standard Go, anda boleh menyambung ke pangkalan data jauh seperti MySQL, PostgreSQL atau SQLite: buat rentetan sambungan yang mengandungi maklumat sambungan pangkalan data. Gunakan fungsi sql.Open() untuk membuka sambungan pangkalan data. Lakukan operasi pangkalan data seperti pertanyaan SQL dan operasi sisipan. Gunakan tangguh untuk menutup sambungan pangkalan data untuk mengeluarkan sumber.

Bagaimana untuk menggunakan fungsi panggil balik pangkalan data di Golang? Bagaimana untuk menggunakan fungsi panggil balik pangkalan data di Golang? Jun 03, 2024 pm 02:20 PM

Menggunakan fungsi panggil balik pangkalan data di Golang boleh mencapai: melaksanakan kod tersuai selepas operasi pangkalan data yang ditentukan selesai. Tambah tingkah laku tersuai melalui fungsi berasingan tanpa menulis kod tambahan. Fungsi panggil balik tersedia untuk operasi memasukkan, mengemas kini, memadam dan pertanyaan. Anda mesti menggunakan fungsi sql.Exec, sql.QueryRow atau sql.Query untuk menggunakan fungsi panggil balik.

Bagaimana untuk mengendalikan sambungan dan operasi pangkalan data menggunakan C++? Bagaimana untuk mengendalikan sambungan dan operasi pangkalan data menggunakan C++? Jun 01, 2024 pm 07:24 PM

Gunakan perpustakaan DataAccessObjects (DAO) dalam C++ untuk menyambung dan mengendalikan pangkalan data, termasuk mewujudkan sambungan pangkalan data, melaksanakan pertanyaan SQL, memasukkan rekod baharu dan mengemas kini rekod sedia ada. Langkah-langkah khusus ialah: 1. Sertakan penyata perpustakaan yang diperlukan 2. Buka fail pangkalan data 3. Buat objek Recordset untuk melaksanakan pertanyaan SQL atau memanipulasi data 4. Melintasi keputusan atau mengemas kini rekod mengikut keperluan tertentu;

See all articles