Zoque.Forum
»
Database stratejisi
|
| Veritabanları MySQL , MSSQL, SQL, Access, Oracle |
![]() |
|
|
LinkBack | Seçenekler |
|
|
#1 (permalink) |
|
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
|
Database stratejisi
Merhaba,
Hazırlamakta olduğum sitede birçok database işlemleri birçok kullanıcı tarafından aynı anda yapılabilmesini istiyorum. Daha önce yapmış olduğum bir sitede kullanıcıların yazmış oldukları yazıları veritabanına ekliyorlardı. Ancak bir süre sonra kullanıcıların çok artması nedeniyle iki kullanıcı aynı anda bir yazı eklemeye çalıştığında iki kullanıcıdan biri yazıyı eklerken diğer kullanıcıya "bu veri tabanı kilitli" tarzında bir hata mesajı görünüyordu. Database olarak access kullanıyordum ve sonra access in bir özelliği sayesinde ancak durumu kurtarmıştım. Artık iki kişi aynı anda işlem yapmaya çalıştığında bekleme süresi her iki kullanıcı için de iki katına çıkıyordu ama hata vermeden işlem tamamlanabiliyordu. Şimdi bu durumu tekrar yaşamamak için (ki bu sefer kullanıcı sayıları ve veritabanında yapılacak işlemler çok fazla olacak) database'i hazırlarken bu durumu engelleyecek önlemler almak istiyorum. Aklıma herhangi bir kullanıcı database'i uzun süre (nispeten uzun süre) kilitleyecek bir işlem yapacağı zaman bu veriyi o anda oluşturulan geçici bir tabloya alayım daha sonra database'le ilgili işlem yapılmadığı anda asıl tabloya eklemek aklıma geliyor. Yani bir nevi işlemleri sıraya koymak. Ancak bu database'in işlem yapmadığı bir anı nasıl kontrol ettirebilir, işlemleri nasıl sıraya koyabilirim bilmiyorum. Bu nasıl yapılabilir? Yada bu tür bir yaklaşım ne kadar işe yarar? Ne tür bir yaklaşım daha mantıklı olur? Teşekkürler.. |
|
|
|
|
|
#2 (permalink) |
|
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
|
Re: Database stratejisi
Herşeyden önce bir SQL server veya MySQL tavisyem var sanırım MS Access kullanıyorsun, çoklu bağlantıların olduğu işlemlerde bu veritabnaları bariz bir rahatlık sağlayacaktır.
İkinci olarak bağlantı kitlenmesinin en kritik noktasaı "Open" lardır. Grçekten neye ihtiyacın varsa o an ona göre open etmen gerekir. Bu konularda forumda da aratma yapabilirsen daha önceden open lock lar hakkında konuların gemiş olması gerekiyor
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site! |
|
|
|
|
|
#3 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,912
|
Re: Database stratejisi
ayrıca SQL server kullanman durumunda, stored procedure kullanmannı da tavsiye ederim. stored procedure avantajı, veritabanı iş yükünü kodlama üzerinden alıyor, veri update/insert işlemini de zaten kendini bir kuyruğa atarak yapıyor.
recordset lock/open ayarları da uygun şekilde yapıldığında çok kullanıcı açısından bir problem teşkil etmez. tabiiki veritabanı data olarak büyüdüğünde göreli bir yavaşlama olacaktır.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
|
|
#4 (permalink) |
|
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
|
Re: Database stratejisi
Cevabın için teşekkür ederim ancak maalesef şu anda access kullanmak zorundayım.
Lock type'lar konusunda haklısın, lock type'ları biliyorum aslında ve dikkat ediyorum kullanırken. Ancak durum lock type'larına dikkat etmek ile çözülebilecek bir durum değil. Kullanıcılar sıklıkla veritabanına yeni satır ekliyor ve bu durumda 1,3 ile açmak gerekiyor. 1,3 ile açtığımızda veritabanında gerçekleşen işlem bitinceye kadar diğer kullanıcılar işlem yapamıyor. Sorumda da bahsettiğim gibi bunu access dosyasını hazırlarken kullanabildiğimiz bir ayar ile hata vermesini önler hale getirebiliyoruz ama gene de beklemeyi engelleyemiyoruz ve aslında bu çok normal bir durum access için. İşte bunu aşabilmek için ne yapabilirim diye düşünüyorum. Geçici tablolar ile çalışmayı düşünüyorum ancak geçici tablolar ile çalışsam da verileri ana tablolara aktarmak gerekiyor. Bunu nasıl otomatik yaptırabilirim diye çözüm arıyorum. Acaba şöyle birşey mümkün mü: Kullanıcı bir yere tıkladığında, serverda çalışması belki 10-15 saniye alacak bir işlemi başlatsam ama kullanıcı işlemin sonucunu beklemeden başka bir sayfaya yönlendirilse, serverda çalışması gereken olay background da devam etse. Eğer böyle bir şey mümkünse oluşturmayı düşündüğüm geçici tabloları ana tabloya aktarma işini server'a yıkmış olur, kullanıcıyı bekletmemiş olurum. Ne dersiniz? |
|
|
|
|
|
#5 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,912
|
Re: Database stratejisi
geçici tablolar da çözüm üretmeyecektir, sonuçta ha ana tablo, ha geçici tablo,, yine birçok kullanıcı aynı tablo üzerinde işlem yapacakları için durum değişmez.
bu durumda insert/update işlemleri için recordset yerine direkt connection.execute kullanman tavsiye edilebilir. çünkü bu durumda tablolar lock edilmez, sadece insert/update edip tabloyu serbest bırakır. bu da önemli bir performan etkenidir. zaten select edildiğinde tablolar üzerinde herhangi bir lock işlemi olmaz, insert/update işlemlerinde de recordsetten vazgeçmek tercih edilmelidir.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
|
|
#6 (permalink) |
|
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
|
Re: Database stratejisi
Ben recordset ile yapıyordum bugüne kadar işlerimi. SQL deyimlerinin çoğunu da bilmiyordum aslında. Şimdi onlara bakıyorum ama fark tam olarak nedir bilemiyorum. Aslında bu konu benim için hala çözemediğim konulardan birisi. Konu biraz dağılacak ama büyük bir uygulama için veritabanı tasarlarken veriyi küçük tablolar halinde tutmaya çalışmak mı iyi bir seçenektir. Yoksa iyi düşünülmüş ve tasarlanmış büyük tablolar halinde mi tutmak iyidir ? Bu konudaki başka tavsiyeleriniz neler olabilir?
Teşekkürler.. |
|
|
|
|
|
#7 (permalink) | |
|
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
|
Re: Database stratejisi
Alıntı:
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site! |
|
|
|
|
|
|
#8 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,912
|
Re: Database stratejisi
recordset kullanarak update/insert işlemi yapmak performans kaybı anlamına gelir. şöyle ki, recordset writable olarak açıldığında, SQL ile seçilen tüm alanlar yüklenene ve recorset.update işlemi yapılana kadar recordset lock edilir. bu esnada tüm recorset gözden geçirilerek ilgili işlem yapılır. aslında bu veri bütünlüğünü korumak maksatlı birşeydir. readonly açıldığında ise adece veriler okunana kadar lock edilir. ancak insert/update işlemi SQL üzerinden yapıldığında sadece ilgili alan insert/update edilene kadar tablo lock edilir ve işlem bitince serbest bırakılır. dolayısıyla tüm tablo yerine sadece ilgili kayıt ile ilgili işlem yapıldığı için performans artışı olacağı muhakkak.
database konusu ise daha geniş bir konudur ve database analistlerinin işidir. ancak birkaç püf nokta bilindikten sonra optimuma yakın veritabanları oluşturulabilir. bunlar; "primary key ile birincil alakalı olmayan bütün kolonlar o tablo dışına çıkarılır, ve aralarında ilişki kurulur." ana fikri her zaman ilişkisel veritabanı için geçerli olan bir yoldur. daha açık şekli "tabloda tekrar eden kolonlar ayri tabloya alınmalıdır, id'si ana tabloda tutulmalıdır." mesela kişisel bilgiler tutuluyor olsun, doğum yerleri tekrar eden alanlardır, bunun yerine doğum yerleri -iller mesela- bir tabloda toplanıp, kişisel bilgiler tablosunda da bu yere ait olan id tutulması gerekir. bir sonraki adım "bir tabloda bire bir eşlenmeyen kolonlar başka tablolarda tutulmalıdır." kişisel bilgiler tablosundan devam edersek, herkesin icq numaraları olmayabilir, icq kayıtlarını tutan bir tablo yapılmalı kişi id'si ile beraber icq numaraları tutulmalıdır. böylece boş kayıtların önüne geçilmiş olur. bu iki temel normalizasyon kullanıldığında, neredeyse- optimum bir tablo yapısı ortaya çıkacaktır. devam normalizasyon çeşitleri de vardır ama data miktarı arttıkça kullanılması daha uygun düşmektedir. bu da "tabloda key olmayan her kolon ayrı tablolarda tutulmalıdır." ancak bu biraz ileri seviye normalizasyon olmaktadır.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com Mesaj absconder tarafından 21.07.2004 (08:58) yeniden düzenlendi.. |
|
|
|
|
|
#10 (permalink) | |
|
Mesaj: n/a
|
Re: Database stratejisi
Alıntı:
[ aynı zamanda soru da olsun ?? ]her bölüm için arkadaşın ayrı databe kullanması bu işlem olaylarındaki karmaşıklığı azaltmaz mı? gerçi kodlama açısından çok daha yorucu olur orası kesin.. ama en azından böyle bir sorun için nefes aldırıcı olabilir diyelim ki sitede 5 bölüm var 1. bölüme yazı ekleyenle diğer bölümlere yazı ekleyenlerin zaman bakımından rastlaşma ihtimali farklı veritabanlarında önemsizleşiyor ?(mu) ayrıca data büyüse bile 5 bölümün datasını taşıyan 1 veritabanıyla 5 veritabanını kıyaslamak bile yanlış olacaktır herhalde (mi ?) aceminin yanıtı ancak bu kadar olur! ![]() |
|
|
Zoque'a hoşgeldiniz!