Graves
- 9 Eki 2024
- 10,470 Mesaj
- TIM Görevleri
- 2
Aktiflik
Seviye
Deneyim
MySQL Sorgularında JSON Kullanımı Nested Veri Yapılarının Verimli Yönetimi
Merhabalar Ben @Phobos Lojistik grup adına paylaşılan MySQL Sorgularında JSON Kullanımı Nested Veri Yapılarının Verimli Yönetimi makalesinde sizi görmekten mutluyum.
Günümüzde birçok uygulama, esnek ve yapılandırılmış veri modellerine ihtiyaç duyar. JSON (JavaScript Object Notation), bu ihtiyaca yönelik hafif ve okunabilir bir veri formatıdır. MySQL 5.7 sürümünden itibaren JSON veri türünü yerleşik olarak desteklemektedir. Bu destek sayesinde, özellikle nested (iç içe) veri yapılarının saklanması ve sorgulanması mümkün hale gelmiştir.
Bu makalede MySQL'de JSON veri türü ile çalışmanın temelleri, nested veri yapılarını yönetme teknikleri ve performans ipuçları anlatılmaktadır.
Tablo oluştururken JSON sütunu şu şekilde tanımlanabilir
Bu tabloda ozellikler sütunu, ürünle ilgili çeşitli özellikleri (örneğin renk, beden, stok) JSON biçiminde tutar.
Burada stok bir nested (iç içe) JSON nesnesidir.
Bu yöntem, JSON içindeki verilere daha hızlı erişim sağlar.
MySQL'in JSON desteği, iç içe geçmiş ve esnek veri yapılarının ilişkisel veritabanlarında tutulmasını mümkün kılar. Nested JSON yapıları ile veri daha anlamlı ve ilişkisel olmayan şekilde saklanabilir. Ancak, performans ve bütünlük açısından dikkatli tasarım gereklidir.
Merhabalar Ben @Phobos Lojistik grup adına paylaşılan MySQL Sorgularında JSON Kullanımı Nested Veri Yapılarının Verimli Yönetimi makalesinde sizi görmekten mutluyum.
Günümüzde birçok uygulama, esnek ve yapılandırılmış veri modellerine ihtiyaç duyar. JSON (JavaScript Object Notation), bu ihtiyaca yönelik hafif ve okunabilir bir veri formatıdır. MySQL 5.7 sürümünden itibaren JSON veri türünü yerleşik olarak desteklemektedir. Bu destek sayesinde, özellikle nested (iç içe) veri yapılarının saklanması ve sorgulanması mümkün hale gelmiştir.
Bu makalede MySQL'de JSON veri türü ile çalışmanın temelleri, nested veri yapılarını yönetme teknikleri ve performans ipuçları anlatılmaktadır.
JSON Veri Türü Nedir?
MySQL'deki JSON veri türü, geçerli JSON belgelerini saklamak için kullanılır. Dizi, nesne, sayı, string gibi yapıları barındırabilir.Tablo oluştururken JSON sütunu şu şekilde tanımlanabilir
Kod:
CREATE TABLE urunler (
id INT AUTO_INCREMENT PRIMARY KEY,
adi VARCHAR(255),
ozellikler JSON
);
Bu tabloda ozellikler sütunu, ürünle ilgili çeşitli özellikleri (örneğin renk, beden, stok) JSON biçiminde tutar.
JSON Veri Ekleme
JSON sütununa veri eklerken geçerli JSON formatına uymak gerekir
Kod:
INSERT INTO urunler (adi, ozellikler)
VALUES (
'T-Shirt',
'{
"renk": "mavi",
"beden": "L",
"stok": {
"depo1": 120,
"depo2": 45
}
}'
);
Burada stok bir nested (iç içe) JSON nesnesidir.
JSON Değerlerini Sorgulama
-> ve ->> Operatörleri
- -> JSON içinden veri döner (JSON formatında)
- ->> düz metin (string) olarak veri döner
Kod:
-- Beden değerini düz string olarak getirir
SELECT adi, ozellikler->>'$.beden' AS beden FROM urunler;
-- Stok içindeki depo1 değerini JSON olarak getirir
SELECT ozellikler->'$.stok.depo1' AS depo1_stok FROM urunler;
Nested (İç İçe) JSON Alanlarına Erişim
İç içe alanlardaki verilere ulaşmak için JSON yol (path) ifadeleri kullanılır
Kod:
-- depo1 alanı 100'den büyük olan ürünleri getir
SELECT * FROM urunler
WHERE CAST(ozellikler->'$.stok.depo1' AS UNSIGNED) > 100;
JSON Veri Üretimi
MySQL içinde JSON verisi oluşturmak için aşağıdaki fonksiyonlar kullanılabilir
Kod:
-- JSON array oluşturur
SELECT JSON_ARRAY('red', 'green', 'blue');
-- JSON nesnesi (object) oluşturur
SELECT JSON_OBJECT('renk', 'siyah', 'beden', 'M');
JSON Alanlarını Güncelleme
JSON_SET, JSON_INSERT, JSON_REPLACE
Bu fonksiyonlar, JSON verilerini dinamik olarak değiştirmek için kullanılır- JSON_SET: Belirtilen anahtarı ekler ya da günceller.
- JSON_INSERT: Sadece anahtar yoksa ekler.
- JSON_REPLACE: Sadece anahtar varsa günceller.
Kod:
-- depo3 alanını 33 olarak ayarlar
UPDATE urunler
SET ozellikler = JSON_SET(ozellikler, '$.stok.depo3', 33)
WHERE id = 1;
JSON İçeriğinde Arama
JSON_CONTAINS
Bir JSON alanında belirli bir değerin olup olmadığını kontrol eder
Kod:
-- Renk değeri "mavi" olan ürünleri getir
SELECT * FROM urunler
WHERE JSON_CONTAINS(ozellikler, '"mavi"', '$.renk');
JSON Alanlarda İndeks Kullanımı
JSON sütunlarına doğrudan indeks eklenemez, ancak sanal (virtual veya stored) sütunlar oluşturularak bu sütunlar üzerine indeks yapılabilir.
Kod:
-- Sanal bir sütun ve indeks oluşturma
ALTER TABLE urunler
ADD COLUMN beden_sanal VARCHAR(10) GENERATED ALWAYS AS (ozellikler->>'$.beden') STORED,
ADD INDEX (beden_sanal);
Bu yöntem, JSON içindeki verilere daha hızlı erişim sağlar.
Performans Önerileri
- Sık erişilen JSON alanları için sanal sütun oluşturup indekslenmelidir.
- JSON yapısı karmaşıklaştıkça sorguların maliyeti artabilir; sorgular optimize edilmelidir.
- Veri bütünlüğünü sağlamak için uygulama seviyesinde kontroller yapılmalıdır.
MySQL'in JSON desteği, iç içe geçmiş ve esnek veri yapılarının ilişkisel veritabanlarında tutulmasını mümkün kılar. Nested JSON yapıları ile veri daha anlamlı ve ilişkisel olmayan şekilde saklanabilir. Ancak, performans ve bütünlük açısından dikkatli tasarım gereklidir.


