v2.5.2
Giriş yap

Çok kullanıcılı sistemde id buğ'ı

kaandenizblkn
392 defa görüntülendi

Merhabalar suanda anlık 20 30 kişinin işlem yaptıgı bir sistemim var. Sistemde işlem yaptıktan sonra id'yi last id ile çekip veritabanına yazdırmam gerekiyor
şöyle düşünebilirsiniz. bir blog siteniz var ve başlık içerik ve etiketleri vt' ye kayıt ettiriyorsunuz.
başlık ve içerigi vt ye kayıt ettıkten sonra lastid ile etiketleri başka tabloya ekletiyorum.
fakat last id aldığı için son iki kişi aynıo anda işlem yapınca id'ler karışıyor
bunun önüne nası lgecebilirim scope id diye bir şey duydum fakat
php de nasıl kullanılıyor bilemedim

Cevap yaz
Cevaplar (8)
admin
831 gün önce

kaan merhaba, bir blog yazısını kayıt ettiğin vakit last id zaten senin elinde olur.
sonra etiketleri o last id ye göre eklersin.
concurrency durumu oluşuyorsa senin yazdığın kodda bir sorun var demektir.
normal bir durumda oluşmaması lazım.
bir veriyi kayıt ettiğin vakit o işlem aynı anda yapılsa dahi last id ler farklı olması lazım.

tekrar last id yi bulmak için sql ile son veriye bakmadan alman lazım.

veriyi insert ettiğin vakit id sini alıp etiketleri kayıt etmelisin.
kodun bir kısmını paylaşırsan yardımcı olacak çıkacaktır.

kaandenizblkn
831 gün önce

Sizce bu mantık lı mı ? (Gercekten soruyorum DALGA geçmek için değil). Başka bir yolu var mı ?

qplot
831 gün önce

işlemi yapıyorsun misal blog ekletiyorsun ve son blog id ile etiketleri ve eklıyorsun
bunun yerine id yanına başka alan aç ve misal $_SERVER['REQUEST_TIME_FLOAT'] kullan ve id yerine o yeni açtığın alanın değerini etiketlere vs yazdır
işlemleri id ye göre değil bu alana göre yap

kaandenizblkn
831 gün önce

SADECE iki tane iç içe veri ekleme düşünün ve ilk query'nin last id'sini içindeki query ye ekletiyorum sutun olarak

sorun su blog sitesi olsa tek içerik giren ben olsam sorun yok ama aynı anda 2 işlem yaptıgında çakışıyor sistem last id aldıgı içn
a kullanıcı başladı 1 sanıye sonra b kullanıcı başladı query 'ye
sorun a kullanıcısının last idsi yerine b kulllanıcınını işlemi arada kaldıgı için onun idsini alıyor last id son id alıyor sadece

kaandenizblkn
831 gün önce

Hepinize cevaplar için teşekkür ederim. Öncelikle aynı tabloya yapmak istemiyorum çünkü haftalık olarak kullanılan tagları kullanıcılara rapor halinde satıyorum
en cok hangi tağlar kullanılmış. O yüzden mecburen ayrı tablo kullanmak zorundayım. harici olarak da AI kullanıyorum zaten onu kullanmadan da yapabiliğim yollar var fakat aradıgım
cevap bunlardan bırıs degıl

qplot
832 gün önce

etiketleri virgül ile aynı tabloya yaz explode ıle parcala ve lastinserid yerine ek bir alan aç anlık microtime olarak o alana yaz

admin
833 gün önce

neden auto increment degil id alani? auto inc. yapmak istemiyorsaniz; asenkron degil ise lock kullanmaniz gerekir. asenkron ise semaphore kullanmaniz sorunu cozecektir.

omerati
833 gün önce

kodlarinizi gorebilirmiyiz ?