SQLite , kendi kendine yeten, yerleştirilebilir, işlemsel, sunucusız ve sıfır yapılandırma SQL veritabanı motoru uygulayan açık kaynaklı, çok platformlu, ücretsiz ve küçük bir C kitaplığıdır. Bu, dünyanın en çok kullanılan SQL veritabanı motorudur.
Bir bakışta özellikler
Temel özellikler, izole, atomik, dayanıklı ve tutarlı işlemler için destek içerir, SQL92 uygulaması, veritabanı dosyaları bilgisayarlar arasında serbestçe paylaşılabilir, 2 terabayta kadar veritabanlarını destekler, gigabayt büyüklüğündeki blob ve dizeleri destekler, küçük kod izi, kullanımı kolay ve çok basit bir API (Uygulama Programlama Arabirimi) olarak iyi.
Ayrıca, SQLite, başlangıç yapılandırması veya daha fazla yönetim gerektirmez, geliştiricilerin, uygulama dosyası formatlarını kullanmak için mükemmel olan, harici bir bağımlılığa sahip olmayan, tek bir çapraz platform disk dosyasında eksiksiz bir veritabanını depolamasına olanak tanır. TCL (Araç Komut Dili) bağlamaları ve kapsamlı belgeler.
Diğer programlama dilleri için bağlamalar ayrı olarak kullanılabilir. Kaynak kodu iyi yorumlanmıştır ve SQLite veritabanlarının yönetimi için kullanılacak ofsetden tasarlanmış bağımsız bir CLI (Command-line Interface) istemcisi ile birlikte gelir.
Ne için kullanabilirim?
SQLite veritabanı motoru herhangi bir amaç için kişisel veya ticari olarak kullanılabilir. SQLite için önerilen kullanımlar arasında araçlar için veritabanı, web sitesi veritabanı, kurumsal RDBMS (İlişkisel Veritabanı Yönetim Sistemi) için stand-in ve uygulama dosya formatı yer alır.
Kaputun altında ve desteklenen İşletim Sistemleri
SQLite dağıtımı, bir SQLite veritabanını yönetmek için kullanılabilecek ve SQLite kitaplığının nasıl kullanılacağının bir örneği olarak işlev gören bağımsız bir komut satırı erişim programı (sqlite) ile birlikte gelir. Tamamen ANSI-C programlama dilinde yazılmıştır.
Desteklenen masaüstü işletim sistemleri GNU / Linux, Mac OS X ve Microsoft Windows'u içerir. Desteklenen mobil işletim sistemleri Android ve iOS'u içerir. Hem 32 bit hem de 64 bit donanım platformlarıyla başarılı bir şekilde test edilmiştir ve diğer işletim sistemlerine kolayca taşınabilir.
Bu sürümde yeni olan :
p>
- Bu sürümün öne çıkan özellikleri arasında PostgreSQL tarzı UPSERT desteği ve özellikle de ORDER BY LIMIT sorguları için geliştirilmiş performans yer alıyor.
Sürümde yeni: :
- F2FS dosya sistemindeki atom-yazma yetenekleri yararlanın işleminde düşük işlem yükü için, mevcut. Bu, şu anda SQLITE_ENABLE_BATCH_ATOMIC_WRITE derleme zamanı seçeneği gerektirir.
- ATTACH ve DETACH komutlarının bir işlemin içinde çalışmasına izin ver.
- PRIMARY KEY, tam olarak bir sütun içeriyorsa, sanal tabloların yazılabilir olması için OLMAYAN ROWID izin ver.
- & quot; fsync () & quot; başlık bir WAL sıfırlamada yazıldıktan sonra oluşur, şimdi kontrol noktaları için senkronizasyon ayarlarını kullanır. Bu, bir "fullfsync" kullanacağı anlamına gelir. PRAGMA checkpoint_fullfsync ayarlanmışsa, Mac'lerde.
- sqlite3_sourceid () işlevi, kaynak kodu sürüm kontrolü kontrol ne modifıye edilmiş ve modifikasyonlar varsa, sürüm karma son dört karakter ve quot gösteriliyorsa tespit etmeye çalışır; ALT1 ve quot; veya "alt2". Amaç, tesadüfi ve / veya dikkatsiz düzenlemeleri tespit etmektir. Bir sahtekâr bu özelliği bozabilir.
- İyileştirilmiş de-alıntı sağ taraftaki toplu bir sorgu ile ifadeleri CREATE TABLE AS için sütun adları.
- Daha az "stat () & quot; unix VFS tarafından verilen sistem çağrıları.
- LIKE optimizasyonunu geliştirerek bir ESCAPE yan tümcesiyle çalışır.
- Eskiden eksik oldukları belirsiz satır bozulmalarını tespit etmek için PRAGMA allgrity_check ve PRAGMA quick_check öğelerini geliştirdiler. Ayrıca, pragma'ları da kayıtlarda bozulma olduğunda SQLITE_CORRUPT yerine hata metni döndürecek şekilde güncelleyin.
- Sorgu planlayıcısı, artık sorgu düzleştirici optimizasyonu kullanarak birlikte rutinleri kullanarak FROM yan tümcesi alt sorgularını kullanmayı tercih ediyor. Alt sorgular için ortak rutinler kullanımı desteği artık devre dışı bırakılamaz.
- Hakkında bilgi aktarın! =, IS, NULL değil, ve sanal tabloların xBestIndex yöntemine NULL kısıtlamaları.
- Son yeni satır karakterinin eksik olması durumunda, son giriş satırını kabul etmesi için CSV sanal tablosunu geliştirdi.
- Nadiren kullanılan "kazıyı" kaldırın. bellek ayırıcı. SQLite, mümkün olduğunda büyük bellek ayırmalarından kaçınılması gerektiğini gösteren bir ipucu veren SQLITE_CONFIG_SMALL_MALLOC yapılandırma ayarıyla değiştirin.
- Sürgün sanal tablosunu mevcut sendika sanal tablo uzantısına eklendi.
- Veritabanı dosyasının sayfalarına doğrudan erişim sağlamak için sqlite_dbpage sanal tablosu eklendi. Kaynak kodu, birleşmeye dahil edildi ve -DSQLITE_ENABLE_DBPAGE_VTAB derleme zamanı seçeneği kullanılarak etkinleştirildi.
- Yeni bir tür fts5vocab sanal tablo ekle - & quot; örnek & quot; - FTS5 tam metin dizinine mümkün olan en düşük düzeyde doğrudan erişim sağlar.
- Bazı eski dizüstü bilgisayarlarda Firefox'ta sorunlara neden olduğundan, Windows VFS'de rand_s () aramasını kaldırın.
- Komut satırı kabuğuna ait src / shell.c kaynak kodu artık sürüm denetimi altında değil. Bu dosya, oluşturma işleminin bir parçası olarak oluşturulmuştur.
- Çeşitli mikrooptimizasyonlar CPU kullanımını% 2.1 oranında azaltır.
- Hata düzeltmeleri:
- OSSFuzz tarafından keşfedilen hatalı bir assert () deyimini düzeltin. Bilet cb91bf4290c211d
- sqlite3_result_pointer () öğesinde belirsiz bir bellek sızıntısı düzeltin. Bilet 7486aa54b968e9b
- Sorgu planlayıcısının çalışması bittikten sonra şema resetlerinin ertelenmesiyle olası bir kullanım sonrası-sonrası hatadan kaçının. Ticket be436a7f4587ce5
- Yalnızca COLLATE doğruysa SİPARİŞ BY ya da GROUP BY'yi optimize etmek için ifadeler üzerinde indeksleri kullanın. Bilet e20dd54ab0e4383
- İndekslemedeki bir ifadedeki ifade gerçekten sabit olduğunda ortaya çıkan bir onaylama hatasını düzeltin. Bilet aa98619ad08ddca
- PRAGMA reverse_unordered_selects sonrasında meydana gelebilecek bir onaylama hatasını düzeltin. Bilet cb91bf4290c211d
- Bir IN veya EXISTS alt sorgusunda tablo değerli işlevler kullanan sorgularda oluşabilecek bir segfault'u düzeltin. Bilet b899b6042f97f5
- Belirli bir korkunç ortak tablo ifadesini derlerken olası bir tamsayı taşması sorununu düzeltin. Bu OSSFuzz tarafından keşfedilen başka bir sorundu. Check-in 6ee8cb6ae5.
- Google Project Zero'nun Natalie Silvanovich tarafından algılanan bir bozuk veritabanı dosyasını sorgularken olası bir okuma dışı okuma düzeltmesini düzeltin. Check-in 04925dee41a21f.
Yeni olan nedir? 3.20.1 sürümünde:
- Sürüm 3.20.1 yama sürümü, nadir bir bellek sızıntısını gidermek için sqlite3_result_pointer () arabiriminde iki satırlık kodu değiştirir.
Sürüm 3.9.2’de yeni:
:- SQLite sürüm 3.9.2, iki belirsiz hatayı gideren bir yama sürümüdür.
Sürüm 3.8.9'da yeni: :
- Bu sürümdeki yeni özellikler PRAGMA index_xinfo komutu, sqlite3_status64 () arayüzü ve komut satırı kabuğunun ".dbinfo" komutunu içerir.
Sürüm 3.8.8.2’de yeni:
:
- 3.8.8.2 düzeltme eki tek bir küçük sorun giderir: Günlük sıfırlanmış ve yeni içerik içermemiş olsa bile sqlite3_wal_checkpoint (TRUNCATE) işleminin her zaman yazma önceliğini kesmesini sağlar. Bunun bir hata düzeltmesi mi yoksa yeni bir özellik mi olduğu açık değil.
- Bunun gibi bir şey normalde düzenli olarak planlanan bir sonraki yayına girer, ancak önde gelen bir SQLite kullanıcısı bu atakta değişime ihtiyaç duyuyordu, bu yüzden bu yama ile acele etmekten mutluyuz.
- Aslında sqlite3_wal_checkpoint'in (TRUNCATE) gelişmiş davranışına ihtiyacınız olmadıkça yükseltmek için bir neden yoktur.
Sürüm 3.8.8.1’de yeni: :
- Sürüm 3.8.4'ten beri bulunan sıralama mantığında bir hatayı düzeltin; bu, bir ORDER BY yan tümcesi, bir LIMIT yan tümcesi içeren ve yaklaşık 60 veya daha fazla sütun içeren sorgularda yanlış sırada görünmesine neden olabilir. sonuç kümesi Bilet f97c4637102a3ae72b79.
- SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
- sqlite3.c için SHA1: 33987fb50dcc09f1429a653d6b47672f5a96f19e
Sürüm 3.8.8’de yeni: :
- Yeni Özellikler:
- Bir veritabanı dosyasının başka bir işlem tarafından değiştirilip değiştirilmediğini belirlemek için kullanılabilecek PRAGMA data_version komutu eklendi.
- SQLITE_CHECKPOINT_TRUNCATE seçeneğini sqlite3_wal_checkpoint_v2 () arabirimine ekleyerek PRAGMA wal_checkpoint'e karşılık gelen geliştirmeleri ekledik.
- Yalnızca SQLITE_ENABLE_STMT_SCANSTATUS ile derlendiğinde kullanılabilen sqlite3_stmt_scanstatus () arayüzü eklendi.
- sqlite3_table_column_metadata (), WITHOUT ROWID tablolarında doğru şekilde çalışacak ve sütun adı parametresi NULL ise bir tablonun varlığını kontrol edecek şekilde geliştirilmiştir. Arabirim artık SQLIT_ENABLE_COLUMN_METADATA derleme zamanı seçeneği gerektirmeden varsayılan olarak derleme içerisine dahil edilmiştir.
- SQLITE_ENABLE_API_ARMOR derleme zamanı seçeneği eklendi.
- SQLITE_REVERSE_UNORDERED_SELECTS derleme zamanı seçeneği eklendi.
- SQLITE_SORTER_PMASZ derleme zamanı seçeneği ve SQLITE_CONFIG_PMASZ başlangıç zamanı seçeneği eklendi.
- SQLITE_CONFIG_PAGECACHE ile kullanım için uygun bellek miktarını belirlemeyi kolaylaştıran SQLite_CONFIG_PCACHE_HDRSZ seçeneğini sqlite3_config () öğesine ekleyin.
- VALUES deyimindeki satır sayısı artık SQLITE_LIMIT_COMPOUND_SELECT tarafından sınırlandırılmamıştır.
- SQL'i yinelemeli olarak değerlendirecek bir eval () SQL işlevi uygulayan eval.c yüklenebilir uzantı eklendi.
- Performans Geliştirmeleri:
- % 3,2 genel performans artışı için b-ağacının dengelenmesiyle ilgili memcpy () işlemlerinin sayısını azaltın.
- Atlama taraması optimizasyonu için maliyet tahminlerindeki iyileştirmeler.
- Otomatik endeksleme optimizasyonu artık uygunsa kısmi bir dizin oluşturabilir.
- Hata düzeltmeleri:
- Günlük dosyasını kesmeden hemen sonra fsync () öğesini çağırarak, "PRAGMA journal_mode = TRUNCATE" ile bir güç kaybından sonra dayanıklılığı sağlayın.
- Sorgu planlayıcısı, bir sütun bir NULL NULL kısıtlaması olsa bile, bir sol katmanın sağdaki tablosundaki herhangi bir sütunun NULL olabileceğini artık biliyor. Bu durumlarda NULL testlerini optimize etmeye çalışmaktan kaçının. Bilet 6f2222d550f5b0ee7ed için düzelt.
- ORDER BY öğesinin, DISTINCT operatörü inen bir dizin kullanılarak uygulanmış olsa bile satırları artan sırada koyduğundan emin olun. Bilet c5ea805691bfc4204b1cb9e için düzelt.
- Paylaşılan önbellek modunda, bazı iş parçacıklarının açılıp kapanacağı birçok iş parçacığı ile çalışırken, stres altında oluşabilecek veri yarışlarını düzeltin.
- American fuzzy lop tarafından bulunan belirsiz kilit hatalarını düzeltin. Bilet a59ae93ee990a55.
- R-Tree uzantısının -O3 ile derlendiğinde hatalı sonuçları hesaplamasına neden olan bir GCC iyileştiricisi hatası (Mac OS 10.7'deki gcc 4.2.1 için) üzerinde çalışın.
- Diğer değişiklikler:
- Özel olarak -DHAVE_STRCHRNULL derleme zamanı seçeneği kullanılarak etkinleştirilmemişse, strchrnul () C kitaplığı rutininin kullanımını devre dışı bırakın.
- Olabilirlik (), olasılık () ve olası () SQL ipucu işlevlerinin etkinliğine ve doğruluğuna yapılan iyileştirmeler.
- SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
- sqlite3.c için SHA1: 91aea4cc722371d58aae3d22e94d2a4165276905
Sürüm 3.8.7.4’de yeni:
:
- Bu sürüm düzeltmeleri, 3.8.7.3 yamasının değişikliklerinin gerektirdiği, ancak yanlışlıkla atlanan bir muteks ekliyor. Mutex, dahili SQLite testlerinden hiçbirine gerek duymadı, ancak Firefox onsuz çöküyor. Muteks'in bir daha asla kaçırılmaması için test senaryoları eklenmiştir.
Sürüm 3.8.7.3’te yeni:
:- Hata düzeltmesi: Önbelleğe alınmış KeyInfo nesnelerinin (uygulama tarafından görünmeyen bir iç soyutlama), paylaşılan önbellek modunda çalışırken ve aynı veritabanı önbelleğinde açıkken diğer veritabanı bağlantılarını bırakırken bazı veritabanı bağlantılarını sık sık kapatıp yeniden açtığından emin olun. devamlı olarak. Bilet e4a18565a36884b00edf.
- Hata düzeltmesi: Bir LEFT JOIN'in sağdaki tablosundaki herhangi bir sütunun, sütunun NULL NULL kısıtlaması olmasa bile NULL olabileceğini unutmayın. Sütunun asla NULL olmadığını varsayan optimizasyonlar uygulamayın. Bilet 6f2222d550f5b0ee7ed.
- SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
- sqlite3.c için SHA1: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
Sürüm 3.8.7.2’de yeni:
:
- Bu sürümün temel nedeni, ROLLBACK komutunun şemayı değiştirmediği sürece çalışmaya devam etmesi için aynı veritabanı bağlantısında sorgu çalıştırmasına izin vermesi için ROLLBACK komutunu geliştirmektir. SQLite'ın önceki tüm sürümlerinde, bir ROLLBACK, bekleyen sorguların derhal durmasına ve SQLITE_ABORT veya SQLITE_ABORT_ROLLBACK döndürmesine neden olur. ROLLBACK veritabanı şemasını değiştirirse, bekleyen sorgular hala iptal edilir, ancak bu yama sürümünden itibaren, şema değiştirilmemişse sorguların çalışmaya devam etmesine izin verilir.
- ROLLBACK geliştirmesine ek olarak, bu yama sürümü ayrıca üç belirsiz hata için düzeltme içerir.
Sürüm 3.8.7.1’de yeni:
:
- Bu hata düzeltme sürümünün birincil nedeni, ALTER TABLE ADD COLUMN kullanılarak eklenen bir tablonun sonunda alanların değerini güncellemeyle ilgili bir sorunu gidermektir. Bu sorun 1, ilk olarak 3.8.7 sürümünde yayınlandı.
- 3.8.7 sürümündeki bir diğer küçük sıkıntı, Android yapısının, standart C kitaplığından strchrnul () işlevini kullanmaya çalıştığı, ancak bu işlevin Android'de mevcut olmadığı gerçeğiydi. Android, problemi çözmek için -DHAVE_STRCHRNUL = 0 değerini eklemişti. Bu düzeltme eki, Android'in artık herhangi bir değişiklik yapmadan çalışması gerektiğini düzeltir.
- PRAGMA'nın çalışması: journal_mode = TRUNCATE, PRAGMA senkron = FULL olduğunda günlük dosyasını kesmeden sonra fsync () öğesini çağırır. Bu, işlemden kısa bir süre sonra meydana gelen bir güç kaybı durumunda işlemin dayanıklılığını korumaya yardımcı olur.
- Son olarak, UPDATE ve VIEW'larda DELETE komutlarının çalıştırılmasıyla ilişkili uzun süredir devam eden ve belirsiz birkaç sorun düzeltildi.
Sürüm 3.8.7’de yeni: :
- Bir önceki sürümdeki değişikliklerin çoğu, SQLite'nin biraz daha hızlı çalışmasına yardımcı olmak için tasarlanmış mikro optimizasyonlar olmuştur. Her bireysel optimizasyon, ölçülemeyen küçük bir performans etkisine sahiptir. Ancak iyileştirmeler toplanıyor. Linux üzerinde cachegrind kullanarak ve x64 linux üzerinde gcc 4.8.1 ve -Os ile derlenen, iyi tanımlanmış bir iş yükü (SQLite geliştiricilerinin tipik bir uygulama iş yükü için proxy olarak kullandığı) üzerinde ölçüldüğünde, mevcut sürüm% 20'den fazla iş önceki sürümle karşılaştırıldığında aynı sayıda CPU döngüsü. Cachegrind gerçek bir CPU değildir ve ölçüm için kullanılan iş yükü yalnızca bir proxy'dir. Yani performansınız değişebilir. Gerçek dünyadaki uygulamalarda ölçülen ve rapor edilen iyileşmenin yaklaşık yarısını görmeyi bekliyoruz. % 10,% 20'den azdır, ancak yine de oldukça iyidir, düşünürüz.
- Bu sürümde, imzalanmış 32 bit uzunluk parametreleri yerine, imzasız 64 bit olan yeni bir C dili arabirimi kümesi bulunur. Yeni API'ler herhangi bir yeni özellik sunmuyor. Ancak, tamsayı taşması güvenlik açıklarına daha dayanıklı uygulamalar yazmayı kolaylaştırırlar.
- Bu sürümde, büyük sıralama işlemlerine yardımcı olmak için birden çok ileti dizisini kullanabilen yeni bir sıralayıcı da bulunur. (Sıralama işlemleri bazen ORDER BY ve / veya GROUP BY cümlelerini uygulamak için gereklidir ve hemen hemen her zaman CREATE INDEX için gereklidir.) Çoklu-thread sıralayıcısı varsayılan olarak kapalıdır ve PRAGMA thread SQL komutu kullanılarak etkinleştirilmelidir. Çok iş parçacıklı sıralayıcının büyük çeşitler için daha hızlı gerçek zamanlı performans sağladığını, ancak daha fazla CPU döngüsü ve daha fazla enerji kullandığını unutmayın.
Sürüm 3.8.3.1’de yeni:
:
- SQLite sürüm 3.8.3.1, 3.8.1, 3.8.2 ve 3.8.3 sürümlerinde bulunan ve sorguların geçerli çıktı satırlarını atlamasına neden olabilecek bir hatayı düzeltir. Bu sürümlerden yükseltmek önerilir.
- Sorun, yalnızca SQLite, SQLITE_ENABLE_STAT3 veya SQLITE_ENABLE_STAT4 derleme zamanı seçenekleri ile derlenmişse ortaya çıkar. Bu durumda, bir sorguda aşağıdaki gibi ifadeler içeren bir WHERE yan tümcesi varsa:
- NEREDE (expr1 VEYA expr2 OR ... VEYA exprN) VE sütun NULL DEĞİLDİR
- Tüm expr1-exprN öğelerinin endekslerle kullanım için uygun olduğu durumlarda, SQLite sorgulama sırasında yanlışlıkla "column IS NOT NULL" terimini "column & gt; NULL" haline dönüştürebilir. Ancak, ikinci terim asla doğru değildir ve bu nedenle sorgu hiçbir satır döndürmez.
Sürüm 3.8.3’de yeni: :
- Ortak tablo ifadeleri ve WITH yan tümcesi için destek eklendi.
- printf () SQL işlevi eklendi.
- SQLite_DETERMINISTIC, sqlite3_create_function () ve ilgili arabirimler için 4. argümanda isteğe bağlı bir bit olarak eklenmiş, sürekli argümanlara sahip olduklarında iç döngüden çıkarılan yeni işlevler oluşturabilen uygulamalar sağlar.
- Temel veritabanı dosyasının yeniden adlandırıldığını veya SQLite altından taşındığını belirtmek için bir işlemin başında iade edilen SQLITE_READONLY_DBMOVED hata kodunu ekleyin.
- İşlev çağrıları ve alt sorgular dahil olmak üzere, keyfi ifadelerin, ATTACH dosya adı argümanında olmasına izin ver.
- SELECT ifadesinin geçerli olduğu her yerde bir VALUES ifadesinin kullanılmasına izin ver.
- N == 0 ile çağrıldığında sqlite3_randomness (N, P) tarafından kullanılan PRNG'yi yeniden gönderin. Unix'te bir fork () sonrasında otomatik olarak yeniden başlat.
- Spellfix1 sanal tablosunu geliştirerek, satır aralığını verimli bir şekilde arayabilir.
- Performans geliştirmeleri.
- EXPLAIN komutunu çalıştırırken VDBE bayt kodu görüntülemesindeki iyileştirmeler.
- LEMON ayrıştırıcı oluşturucusuna "% token_class" yönergesini ekleyin ve dilbilgisini basitleştirmek için kullanın.
- OpenBSD'nin tehlikeli kabul ettiği C-kütüphane işlevlerini çağırmaktan kaçınmak için LEMON kaynak kodunu değiştirin. (Örn: sprintf).
- Hata düzeltmesi: Komut satırı kabuk CSV içe aktarma özelliğinde, bir CRLN satırının sonunda bir çift tırnak işareti oluştuğunda bir alanı sonlandırmayın.
- SQLITE_SOURCE_ID: "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
- sqlite3.c için SHA1: 98a07da78f71b0275e8d9c510486877adc31dbee
Yorum Bulunamadı