MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

MySQL has no limit on the number of tables. The underlying file system may have a limit on the number of files that represent tables. Individual storage engines may impose engine-specific constraints. InnoDB permits up to 4 billion tables.

Sınır yoktur, dosya sistemi ile sınırlıdır diyor anladığım kadarı ile, innodb 4 milyar tabloya izin veriyormuş. Sorun olmaz yani, ama tek bir klasörde 1 milyon dosya+indexleri en az 2 milyon dosya eder, bence çok verimsiz bir yapı olur. Hem nasıl bir yapıymış ki bu foreign keyler ile çözülmüyor merak ettim?
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen unicorn64 »

her kayıt için tablo oluşturma ihtiyacı, dahası 1 milyon tablo ihtiyacı ekstrem göründü bana.
karşılaştığınız sorunu detaylı olarak anlatırsanız alternatif çözümler bulunabilir
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen csunguray »

Bir milyon tablo oluşturma ihticacı %99.99 yanlış tasarımdır. Ne yapmak istediğinizi açıklarsanız belki daha etkili bir çözüm öneren biri çıkabilir.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

Resim

yukarıdaki gibi 3 tablo ile hangi at, hangi tarihler arası, hangi testten kaç negatif kaç pozitif çıkmış, en çok hangi tarhilerde hastalanmış vs.vs. alayını tek bir sorguda rahatça dökebilirsiniz. Hatta hastalık tablosunu 4 test ten oluşturmak yerine her hastalık için her bir sonucu tek tek kayıt ederseniz daha da güzel olur, 5. bir test çıktığında alan eklemek zorunda kalmazsınız yani. Ayrıca hastalık tablosundan at_id yi de atabilirsiniz ama yıl bazında 200.000 kayıtta pekte önemli değil, ben olsam join kullanmamak için at_id yide kaydederim. hatta numunenin tarihide eklerim o tabloya ki sorgularda hiç join kullanmıyayım.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

Yazdıklarınızdan anladığım, oluşturmuş olduğum senaryonun doğru olduğudur, o zaman sorun yok, değil 500, 5000 farklı test te olsa onun içinde bir tablo oluşturun ve benim yukarıda HASTALIK yazdığım tablo adını testler olarak düşünün, her bir numune için yapılan testler negatif yada pozitif olarak test tablosundan çekilen test id si altına kaydedilsin, TESTLER tablosundaki toplam alan id,at_id,numune_id,test_id,deger şeklinde en çok 5 adet olacaktır. Bu şekilde bir yapı ile değil 1 milyon, 10 milyon kaydınız bile olsa tüm alanlar integer veya smallinteger olduğu için herhangi bir sorgu sonucunun size dönmesi birkaç saniyeyi bulmayacaktır. Kayıt girişlerinide ister tablo formatında isterseniz tek tek yaptırabilirsiniz. Kullanıcı kayıt girerken, atı seçecek, numuneyi seçecek, hangi test olduğunu seçecek ve 0 yada 1 olarak (Negatif yada Pozitif anlamında) sonucu girecek, geriside select ile sorgu yapmanıza kalacak. 500 field açmanıza gerek yok, yada her at veya sığır için bi tablo açmanıza gerek yok, toplam 4 tablo ile istediğiniz bilgiyi tutabilirsiniz.
Hatta at yada sığırı tanıtırken TURU diye bi alan oluşturursunuz, at ise atı sığır ise sığırı seçer, test tablosuna da aynı alanı açarsınız, xxx testi şu türe uygulanır dersiniz, test sonucunu giren kişi at veya sığırı seçince "bu türe bu testler uygulanabiliyormuş" der program ve sadece o türe ait testleri ekrana basar, kullanıcıda ordan seçer, hata ihtimali de düşmüş olur.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen Battosai »

"Türkiye'de bilmem kaç bilgisayar mühendisli bir proje de bunu daha önce başaramadı..." Büyük bir yükün altına girmişin. Başarılar sana.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

Günaydın;
SOA nedir bilmiyordum az önce baktım öğrendim. SOA yapısı olabilirmi bu olay onu bilemiyorum ama.

Oluşturmaya çalıştığınız sistem bence pek karmaşık değil. Son yazdığınızdan anladığım kadarı ile kullanıcıların herhangi birine üzerinde 10 adet veya farklı adetlerde numune yazılı olan bir fiş yada belge geliyor, bu belgede büyük ihtimalle numaralandırılmış olacaktır. Kullanıcı (analiz yapacak kişi), eline gelen fişte yazılı olan numunelere 100, 200 veya 500 herneyse farklı analiz yapacak. Önce fiş numarası ile sırayla numunelerin kayıtlarını açacak, her numunenin karşısına da şu analiz yapıldı deyip sonucu negatif yada pozitif diye kayıt oluşturacak, fakat bu kayıtlar alt alta değilde bir excel tablosu gibi görünecek.

Bu sistem bana 1-2 hafta önce yine bu forumda sorduğum ve çözümünüde kendim bulduğum cari hesapların döviz cinsinden bakiye tutulmasını hatırlattı. Tek bir cari hesaba ait sınırsız döviz borç-alacak-bakiye tutulması işlemi yani. Normalde cari hesap tablosuna tlbakiye, eurobakiye diye 2 alan açıp 2 döviz bakiyesi tutulabilir fakat müşteri dolar bakiyeside istediğinde gidip tabloya alanmı eklicez? işte orda durum değişiyordu. Aynı sizin sisteminiz gibi, mesela A numunesine sadece x ve y analizleri yapılıyorken, birden z analizide eklenirse işler karışıyor ki siz 400-500 analizden bahsediyorsunuz. Bunun en kolay yolu ana bir tablo açıp numuneleri oraya kaydetmek, yapılan her analizide (önce analiz isimlerini bir tabloya atmanız gerek tabi) bu numune tablosunun altına satır satır her defasında yeni kayıt olarak eklemektir. Sizin sorununuza bunları yan yana göstermek yada girişlerde yan yana bir excel tablosu gibi giriş yaptırmak. Bunu string griddede yaptırabilirsiniz mem table ilede yaptırabilirsiniz, tek tek de yaptırabilirsiniz. Ben olsam tek tek yaptırırım. Bizim yazıp kullandığımız bir IBComboBox compğonenti var, DBLookUpComboBox'a benzer bişi, fakat içersine siz karakter yazmaya başladığınızda uyan veri varsa onu otomatik getiriyor, basitçe onun gibi bişi kullanılabilir. Her analizin bir adı var sonuçta baş harfini veya birkaç harfini yazması yetiyor, içinde geçenleri fitreleyip getiriyor. Bu şekilde kayıtlar girildikten sonra ister string giride aktarın yan yana gösterin (ilk paylaştığınız resimdeki gibi) ister excel e aktarın (en kolayı csv formatında çıktı verin ve otomatik excele açtırın), isterseniz analiz sayısına göre (fazla değilse) fast report a atın.

Bu arada 1400 il ve ilçede kullanılacak demişsiniz, sonuçta her kullanıcı bahsettiğiniz toplu rapora ulaşamayacak (ulaşmamalı), analizileri yapanlar neden tüm türkiyedeki sonuçları görmek istesin ki, bu sonuçlar bir merkezden alınacak sonuç itibarı ile, o yüzden fazlada bir veri trafiği olmıcaktır. Sağlam bir server kurulup db yönetimi ona bırakılıp diğer kullanıcılara da program vermek yerine (1400 program kurulması anlamsız olur yapılan herhangi ufacık bir değişikliği hepsine adapte etmek imkansızdır bana göre) php ile bir tasarım yapılıp herkesin uzaktan bu sisteme bağlanması sağlanabilir ki php ile rapor alıp ekrana basmak çok kolaydır (yacızı içinde pdf e çevirip download ettirirsiniz). MYSQL veya FIREBIRD+DELPHİ+PHP işinizi çok rahat görür bence. Ben olsam php desteği için MYSQL tercih ederdim böyle bir durumda.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen Battosai »

@esistemi'in demek istediği adaptasyon değil sistemi web yazılımı olarak tasarlamanız. Ben böyle bir iş için delphi tercih etmezdim.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

Battosai yazdı:@esistemi'in demek istediği adaptasyon değil sistemi web yazılımı olarak tasarlamanız. Ben böyle bir iş için delphi tercih etmezdim.
aynen, bende delphi tercih etmezdim, belki server tarafında program olarak hazırlanabilir ama 1400 kullanıcısı olacak bir sistem için php yada asp daha uygun olur, ayrıca activex de yapmazdım bana kalsa, php ye nazaran daha yavaş çalışcaktır bence.
fatihbarut yazdı:
tek tek de yaptırabilirsiniz.
işte bu nokta o bahsettiğim bilgisayar mühendislerinin de italyadakilerin de çöktüğü nokta oldu.
DB mantığı gereği neden böyle bir teklifte bulunduğunuzu gayet iyi anlıyorum.
Ancak kendisine 1000 tane numune gelmiş her biri 8 tane test isteyen bir laboratuvar çalışanı sizin bu çözümünüze haykırarak cevap verecektir. Çünkü bu onun işini çözümsüz hale getirmektir. İşte bu noktada ne kadar karmaşık olursa olsun arka planda gerekli algoritmaları yazarak cevap verebilen adam, programcıdır diğerleri ise sorumluğu üstünden atmak için basit ve geçersiz çözümler sunarak kaçanlardır. Ben ne yazık ki şuana kadar bu sistemi kurmak isteyen firmalardan birinci gruba girenle karşılaşmadım ve böylelikle size bahsettiğim yukarıdaki sistem 10 yıl süründü...
Sanırım 1000 adet numune bir günde gelmiyordur, yok eğer geliyorsa sizin bahsettiğiniz şekilde (benim anladığım yan yana grid veya benzer bi nesne üzerinde mouse ile tıklayıp kayıtları girmek) girilmesi bence daha zor olacaktır, fakat gelen numunelere 8-10 adet gibi analiz uygulanacaksa evet öyle yapılabilir, fakat gelen numuneye hangi 8 analizin uygulanacağıda (mesela 100 analiz içinden) bir şekilde belirtmek gereklidir ki bu bile zaman alıcaktır. Onun yerine bahsettiğim şekilde, numune seçilir, yan taraftada analiz adı seçilip değeri girilir, bi kısayol tuşuna basılıp kaydedilir çokta hızlı olucağına eminim.
fatihbarut yazdı:
IBComboBox compğonenti var, DBLookUpComboBox'a benzer
dblookupcombobox'ın sadece oku görünecek şekilde üstüne bir edit koyup on keypress'ine kod yazarak da çözülüyor aynı problem :)
Bunun için dblookupcombobox ı bir query e bağlamanız gerekicek dolayısı ile form'da bir combobox bir query birde edit olmak zorunda, bendeki componentte ise sadece componenti koyup ayarlarından ilgili db ye bağlayıp hangi alanda aranacağını ve çıktı olarak hangi alanı vereceğini seçiyorsunuz. İstersenizde extrawhere şeklinde ilave arama kriterleri girebiliyorsunuz (şu çalışma yılı içersinde arasın gibi). O yüzden bize tasarım olarak büyük olaylık sağlıyor.
fatihbarut yazdı:
php ile bir tasarım yapılıp herkesin uzaktan bu sisteme bağlanması sağlanabilir
canı gönülden katılıyorum. Ancak php'yi bu sisteme adapte etmek için 15 günlük bir öğrenme süreci gerekir ki aynı anda 5 proje yürüten biri olarak şuan ona girişemeyeceğim :)
Bunun için birşey diyemicem :)
En son esistem tarafından 18 Mar 2014 11:37 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

fatihbarut yazdı:mem table olarak tavsiye edebileceğiniz bir component var mı? Gördüğüm kadarı ile bir hayli seçenek var.
Ben RX component paketini kullanıyorum, RXMemoryData işinize yarayabilir, sürekli onu kullanırım. Hatta firebird de Transaction'a hiç ihtiyacım olmadı onun sayesinde (daha doğrusu hiç rollback yapma gereği duymuyorum memdata sayesinde).
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

fatihbarut yazdı:peki şu nasıl
ki en yakın rakibinden 30 kat hızlı olduğunu iddia ediyor

http://www.aidaim.com/in-memory_sql_database_delphi.htm
evet doğrudur, benim size önerdiğim sanırım sql desteklemiyor, ben onu paradox table gibi kullanıyorum, kolayıma geliyor açıkçası kullanmak.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

Selam;
Forma koyduktan sonra, properties->fielddefs ten field leri oluşturun, sonrada sağ klik fields editorden çekin, sonrası paradox gibi. active true yapınca tablo oluşur, append yada insert ile ekleyip refresh etmeniz yeterlidir. yada delete ile silip refresh edin. active false yapınca içindeki bütün bilgi gider. kısaca budur. basit bi kullanımı var yani.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

merhaba;
Çok fazla veri olmadığı zaman stringgrid yada memtable kullanmışsınız pek farketmiyor, fakat satır sayısı arttıkça bu fark ortaya çıkıyor. stringgrid de satır ve sutun bazında döngü oluşturup cell[x,y] olarak ulaşmak bana daha zor geliyor, onun yerine adını bildiğim alandan veri çekmek daha mantıklı, mesela adı ve soyadı alanlarınız var, stringgrid de grid.cell[0,1] adı grid.cell[0,2] soyadı oluyor diyelim, ama table de bu table1adi ve table1soyadi oluyor, sizce hangisi daha uygun geliyor? üstelik verinin tipinide tutuyorsunuz int, string, byte vs.vs. Bana göre memtable programcılar için büyük nimet sonuna kadar yararlanmakta fayda var :)

Size bir kullanım örneği yazayım mesela.
esistem yazdı:daha doğrusu hiç rollback yapma gereği duymuyorum memdata sayesinde

Yazmıştım önceki mesajlarımın birinde. Mesela fatura oluşturacaksınız, yeni butonuna bastınız cari hesabı tarihi vs.vs. girdiniz, ileri dediniz ve fatura1 tablosuna bunları yazdınız, transactionunuz aktif bekliyor, rollbackmı yapacak commitmi diye, verileri daha veritabanında ilgili tabloya yazmadı ama içerde bi geçici tabloya veya neyse bi yere kaydetti, stokları fatura2 tablosuna eklemeye başladınız, her ekledikçe stored proc. çalıştırıyorsunuz yine bunları vt de bi yerlerde tutup bekliyor commit yada rollback yapmanızı, commit yaptığınızda da yazıyor vt deki tablolarınıza, gidip stoktan adetleri düşüyor, cari hareketlerini yazıyor, bakiyeleri ayarlıyor felan filan. O ara elektrik kesilirse bi kaç adet limbo transactionunuz vt nizde hala duruyor, bunu temizlemek için backup restore yapmanız gerek. Bunun yerine mem table lara yazın bütün kayıtlarınızı, kaydet dediğinizde de gidip bunları vt nize yazıp direk commit deyin olsun bitsin. Eğer çokça hareket ve veri olan bi vt de işlem yapıyorsanız oldukça fazla yararını görürsünüz.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

Arka plan işlemleri derken neyi kastettiğinizi anlamadım. Ben program tarafında pek fazla kod yazmam, formun tasarımını yaparım, bu buna bu buna eşittir derim, stored procedure gönderirim, commit yapar, close open yapar çıkarım. adı=edit1.tex, soyadı=edit2.text yazmam mesela. hatta IBUpdateSQL in nasıl kullanıldığını dahi bilmem. Ana formumda 2 tane function oluştururum, biri eklemek diğeri silmek için. Her kayıt ekleme değiştirme ve silme işlemlerinde bunlara değer gönderip sonuç alırım. Hemen hemen bütün kayıt, silme ve uyarı işlemlerini vt kısmında yazarım.

Kod: Tümünü seç

function sp_ekle(DataName:TIBdatabase;TransName:TIBTransaction;StoredName:String; Values: Array Of Variant;  out cikiskodu:integer):Boolean;
 var
   Stored : TIBStoredProc;
   X : Integer;
begin
 TRY
  Stored:=TIBStoredProc.Create(Self);
   with Stored do
   begin
                  Database       := DataName;
                  StoredProcName := StoredName;
                  Transaction    := TransName;
                  Prepare;
                  For x := 0 to Length(Values) - 1 Do Params[x+1].Value := Values[X];
                  ExecProc;
                  UnPrepare;
   end;
  TransName.CommitRetaining;
   cikiskodu := Stored.Params[0].AsInteger;
                    Result:=True;
 Stored.Free;
 EXCEPT
 on E: EConvertError do begin
 Result:=False;
 ShowMessage('DİKKAT...!'+#13+StoredName+' - SP Hatası Oluştu'+#13+E.ClassName + #13 + E.Message);
                          end;
 END;
end;
Yukarıda yazdığım, eklemek ve değiştirmek için kullandığım function dur mesela, değerleri array of variant olarak gönderirim, vt işlemi yapar ve bana işlem bitti, eklenen kaydın id side bu diye değer döndürür. Tabi VT dede buna uygun stored proceduru hazırlamak gerekir.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: MySQL veya MsSQL 1 milyon tabloyu kaldırır mı

Mesaj gönderen esistem »

evet hiç kullanmıyorum, kullanıcıya kolaylık olması için, kullanıcı birçok şeyi toplu olarak görsün diye form kullanma yapım biraz farklıdır. yazdığım birçok programı bende kullandığım için (o sektörlerde çalıştım çünkü) kendime göre kayıt formları oluşturdum. dbnavigator de hiç kullanmam. Sadece dbgrid altında toplam göstermek için bazen dbtext kullanırım.
Cevapla