lostyazilim
tr.link

Mysql sütun sayısı sınırını NASIL AŞARIZ?

8 Mesajlar 1.116 Okunma
lstbozum
tr.link

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
Hemen çıkan hatayı paylaşayım;


#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs


NASIL AŞARIZ BUNU ARKADAŞLAR?


(Not : Birden fazla tablo oluşturmak istemiyorum.)
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
reklam

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
Konu günceldir, bilginize sunarım.
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Üyelik 25.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Engineering Director
  • Konum İstanbul Avrupa
  • Ad Soyad T** C**
  • Mesajlar 771
  • Beğeniler 2 / 260
  • Ticaret 0, (%0)
Yukarıdaki problemi işlem yapılmaya çalışına sutun tipi ve boyutu ile sutun içerisine koymaya çalıştığınız veri tipi ve boyutu uyuşmuyor.

Bu tür sorunlarda en basit çözüm mevcut tablodaki sutunun tipi ve boyutunu yükseltmektir.

Mevcut SUTUN_ADI olan sutunun veri tipini BLOB tipinde güncelledik.

ALTER TABLE TABLO_ADI MODIFY COLUMN SUTUN_ADI BLOB;

BLOB : 64KB veri tutabiliyor.

Ref : https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html

Linkte diğer benzer veri tipleri ve boyutlarına dair bilgi mevcut.

---
Aynı tablo üzerinde data merge edilecekse, yapılacak işlemler.

Tablolarda ayraçlar ve composite(birleştirilmiş) key ile oluşturulmuş primary key kullanmalısınız.

Yanlış hatırlamıyorsam, şehir bazlı aynı DB 'leri klonlayarak oluşturulmuş bir sisteminiz vardı.

Yine yanlış hatırlamıyorsam, benzer bir çözüm önerisinde bulunmuştum.

Öncelikle mevcut çözüm üzerinden ondan daha iyi fakat daha optimum bir çözüme ulaşmak için yapıda ufak tefek dokunuşlara ihtiyaç var.

Veri tipi değerini büyütme ihtiyacı neden çıktı bilmiyorum ama aşağıdakine benzer bir gidişat olması lazım.


products -> ürünler tablosu (ankara, samsun, istanbul) : tablo klon olarak oluşturulmuş her yerde aynıdır diye düşünüyorum. Bunu birleştirmek için sadece ek sutunlar eklemek ve primary key composite yapmak yeterli olacaktır.

Yemeksepeti gibi bir kullanıcı giriş yaptığınızda, şehir ilk ekrandan şehir seçtirin (zorunlu olsun).
Sonrasında seçilen şehri session nesnesine atın, kullanıcı browser üzerinde dolandığı sürece şehir id'sini session'dan alıp, aşağıdaki yapıda tabloya parametre değeri olarak set edersiniz.

eski hali

products
id
name
description
created_at
price
updated_at
creator
updater


yeni hali

products
sehir_id
id
name
description
created_at
price
updated_at
creator
updater

composoite primary key -> ALTER TABLE products ADD CONSTRAINT PK_products PRIMARY KEY (sehir_id,id);

Mevcut yazılımdaki products tablosuna atılmış olan tüm sorgularıda sehir_id kriteri eklenmelidir.

mevcutta istanbul şehri için oluşturulmuş db'deki 1 ID'li ürün getir.

select * from products where sehir_id = 34 and id = 1;


composite primary key'de sehir_id ve id değerlerinin birleştirilmiş hali tekilliği sağlar, o sebeple mevcut products tablosundaki id değerlerinizi değiştirmenize gerek kalmaz.

Aşağıdaki gibi kayıtlar oluşturabilirsiniz.


istanbuldaki db'deki verilerin taşındıktan sonraki hali

34,1,'ayakkabı', 'erkek spor ayakkabı, air', '2021-05-27 13:10:23.122', 500.00,'2021-05-27 13:10:23.122', 'turgay can', 'turgay can'
34,2,'çorap', 'erkek spor çorabı', '2021-05-27 13:10:23.122', 500.00,'2021-05-27 13:10:23.122', 'turgay can', 'turgay can'

ankaradaki db'deki verilerin taşındıktan sonraki hali

6,1,'ayakkabı', 'erkek spor ayakkabı, air', '2021-05-27 13:10:23.122', 500.00,'2021-05-27 13:10:23.122', 'turgay can', 'turgay can'
6,2,'çorap', 'erkek spor çorabı', '2021-05-27 13:10:23.122', 500.00,'2021-05-27 13:10:23.122', 'turgay can', 'turgay can'


umarım anlatabilirmişimdir.

data migration konusunda destek olabilirim.

iyi çalışmalar.
BEYAZMASTER

kişi bu mesajı beğendi.

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
ÜSTADIM HERZAMANKİ GİBİ KOMPLİKE BİR CEVAP VERMİŞSİNİZ...

ÇOK ÇOK SAĞOLUNUZ...


SİZ OLMASANIZ YOL GÖSTERENİMİZ YOK...

1)

TÜRKÇE'sini bile anlamak için yüksek gayret sarfettiğim bir konu bu...
Verdiğiniz linke daha önce ulaşmıştım ama çıkarım yapamamıştım...


2)

"Bu tür sorunlarda en basit çözüm mevcut tablodaki sutunun tipi ve boyutunu yükseltmektir." demişsiniz...



220 civarı sütunu olan bir veri tablom var.

1 tane daha eklememe müsaade etmiyor sistem ve paylaştığım hatayı çıkartıyor!

Ancak 1 tane silersem yeni bir tane oluşturabiliyorum.

Sütunların yaklaşık 200 tanesi char, bunların da çoğuna 10/30 gibi düşük sınırlar koydum yani karakter sayısı sınırlı...

Bu ekonomik bir davranış modeli değil mi?

Hepsi text olsa sınırlandırma uyarısını mantıklı karşılayacağım...

Bana çok manasız geldi bu uyarı ama anlamaya çalışıyorum...



Siz ise yükseltmeyi önermişsiniz... !?



Yükseltmek kolay...

Sütun tipi char olanların tipini varchar yada blob yapsam sorun ortadan kalkar diyebilir miyiz?

Tam olarak ne yapmak gerek üstadım?

Ve bunu yapınca 200 küsür yerine 600/800/1000 sütun oluşturabilir mi?



3)

"Yanlış hatırlamıyorsam, şehir bazlı aynı DB 'leri klonlayarak oluşturulmuş bir sisteminiz vardı." demişsiniz...

Doğru hatırlıyorsunuz üstadım...

Verdiğiniz tutarlı ve ikna edici bilgiler sayesinde şehir bazlı sisteme son verdim 7 bölgeye (7 veritabanına) indirgedim sistemimi...

TEKRAR TEŞEKKÜR EDERİM BUNUN İÇİN...



4)

"tablo klon olarak oluşturulmuş her yerde aynıdır diye düşünüyorum" demişsiniz...

Kesinlikle haklısınız.

Ama tabloların yapıları klonlu sadece içlerindeki veriler değil...

Tümünde o şehirlere (yeni haliyle bölgelere) ait işletmelerin verileri var...




5)

"Bunu birleştirmek için sadece ek sutunlar eklemek ve primary key composite yapmak yeterli olacaktır."

Bu kısmı tam anlayamadım...

Sonraki kısımları hiç anlayamadım...

Veri tablolarını taşımaya neden ihtiyaç var acaba?

Tek yapmak istediğim sütun sayısını tek tablo dahilinde çoğaltmak...

Siz tek tabloda çoğaltmak yerine bir tablo daha oluşturup bu tabloları birbirine bağlamayı ve bu tabloların sanki tek bir tabloymuş gibi işlemesi için alternatif bir yol gösterdiniz sanırım...

Doğru mu anlamışım?

Yoksa
"Sütun sayısını çoğaltmak mümkün değil, mecburen birden fazla tablo oluşturup bunları birbirine bağlamak gerekli" mi demek istediniz?


Daha NET ifadeler ile aydınlatabilirseniz çok makbule geçer üstadım...
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
wmaraci

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Üyelik 25.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Engineering Director
  • Konum İstanbul Avrupa
  • Ad Soyad T** C**
  • Mesajlar 771
  • Beğeniler 2 / 260
  • Ticaret 0, (%0)
O kadar fazla sutun olması zaten doğru bir mimari değil.

Belirttiğim şekilde tablolar arası ilişkiler kurarak tablo dizaynı yapmalısınız.

Biz yazılım yazılmadan önceki en temel öğe data model belirlenmesidir.

data model : tablo ve tablolar arası ilişkilerin dizaynı

Bu kısım baştan hatalı olunca, data model yeniden düzenlendiğinde yazılımda yeniden yazılmış gibi noktaya gelir. Çünkü data model değişikliği yazılım tüm doğasına dokunur.
BEYAZMASTER

kişi bu mesajı beğendi.

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
Mesaj alınmıştır, o rakamları örnek olarak vermiştim zaten...

220 yerine 221 yapmak için bu hatayı nasıl aşarız?
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Üyelik 25.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Engineering Director
  • Konum İstanbul Avrupa
  • Ad Soyad T** C**
  • Mesajlar 771
  • Beğeniler 2 / 260
  • Ticaret 0, (%0)
https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html#column-count-limits

MySQL has hard limit of 4096 columns per table, but the effective maximum may be less for a given table.

4096 adet sutuna kadar eklenebiliyor.

Yukarıdaki hata sutunn eklemek ile değilde sutun tipi ile alakalı geldi bana.

Eğer tabloda sutun ekleme kısmında bir limit var ise db servis sağlayıcınız kymuş olabilir. Defautl. değer 4096.
BEYAZMASTER

kişi bu mesajı beğendi.

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)
Teşekkür ederim üstadım.

4096 yı ben de daha önce görmüştüm haklısınız o tarafta bir sorun yok...

Zamana bıraktım artık konuyu...

(Mesajınızı yeni gördüm, bildirimi farketmedim, kusura bakmayın.)
 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al