Zoque.Forum
Dirsek Teması:
Geri Dön Zoque.Forum » Webmaster Kaynaklari » Sunucu Tabanlı Programlama (Server Side) » Veritabanları » Database stratejisi


Veritabanları MySQL , MSSQL, SQL, Access, Oracle

Yanıt
 
LinkBack Seçenekler
Old 20.07.2004   #1 (permalink)
delizeka
 
delizeka's Avatar
 
Ü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..
delizeka şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 20.07.2004   #2 (permalink)
soul
 
soul's Avatar
 
Ü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!
soul şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 20.07.2004   #3 (permalink)
absconder
 
absconder's Avatar
 
Ü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
absconder şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 20.07.2004   #4 (permalink)
delizeka
 
delizeka's Avatar
 
Ü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?
delizeka şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 20.07.2004   #5 (permalink)
absconder
 
absconder's Avatar
 
Ü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
absconder şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 20.07.2004   #6 (permalink)
delizeka
 
delizeka's Avatar
 
Ü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..
delizeka şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 20.07.2004   #7 (permalink)
soul
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
Re: Database stratejisi

Alıntı:
delizeka tarafından gönderilen mesaj:
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..
Benim aklıma gelmemişti @Özgür ün dediği çok önemli bir faktör. Şahsen her zaman SQL deyimi kullanırım (eski kafalılık gibi gelir bana ama her zaman daha hızlı ve pratik)
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site!
soul şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 21.07.2004   #8 (permalink)
absconder
 
absconder's Avatar
 
Ü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..
absconder şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 21.07.2004   #9 (permalink)
delizeka
 
delizeka's Avatar
 
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
Re: Database stratejisi

Verdiğiniz bilgiler için çok teşekkür ederim.

Bu konuda tavsiye edebileceğiniz Türkçe ya da İngilizce kitaplar var mı? Kendimi bu konularda geliştirmek istiyorum.
delizeka şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 22.07.2004   #10 (permalink)
sadece
 
Mesaj: n/a
Re: Database stratejisi

Alıntı:
delizeka tarafından gönderilen mesaj:
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..
acemi cevabı olacak biraz ama [ 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!
 
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Yanıt

Etiketler
stratejisi , database



 
Zoque'a hoşgeldiniz!
Zoque 27.02.1999 tarihinde yayın hayatına başlamış, paylaşıma dayalı bir oluşumdur. Tasarım, teknoloji, web, kültür ve sanat ana başlıkları altında bilgi paylaşımı ve benzer değerlere sahip katılımcıların birbirleriyle iletişime girmelerine imkan sağlar. "Az ama Öz" sloganından yola çıkarak, kaliteli ve nitelikli katılımı temel alır.

Saygın ve ciddi bir ortamda yardımlaşmak, haberleşmek, kendi bildiklerini diğer katılımcılarla paylaşmak isteyen, oluşumumuza düzenli katılımda bulunacağı inancını taşıyan konuklarımızı üye olmaya davet ediyoruz. [ » ]


Üye Girişi:

UslanmaM baktabul.com TEKplatform TEKplatform

En popüler ilk 100 etiket
Tag Cloud
acil adsl ajax almak arama araniyor ariyorum ariyoruz asp bilen bilgi bilgisayar blog calisma canon css dijital div domain dosya eleman film firefox flash font form forum fotograf freelance google gore grafik grafiker hakkinda hangi hata hatasi hosting html ilgili ilk image internet istanbul istiyorum java javascript karakter kayit kisisel kullanimi link logo mac mail menu muzik mysql nasil neden nedir online photoshop php problemi program programi reklam resim satilik sayfa script server ses sistemi site sitesi son soru sorun sorunsali sorunu sql swf tasarim tasarimci tasarimcisi tasarimi turk turkce veri video web windows wordpress xml yardim yazi yeni zoque
Zoque RSS Aboneliği