• 01-09-2022, 12:45:26
    #1
    Konu Silindi...
  • 01-09-2022, 12:51:58
    #2
    email ve şifre için index ekleyebilirsiniz. Insert işlemini biraz uzatır ama select tarafında büyük performans sağlar.
  • 01-09-2022, 12:57:37
    #3
    Metin dosyasında aynı içerik kontrolu yapılabilirmi eklenmeden önce.
    Farklı farklı metin dosyaları var ise durum değişir.
    Yada farklı bir sunucuda kontrol işlemi gerçekleştirilip yeni bir metin dosyasına yazdırılıp oradan veri ekleme yapılabilir.

    Sadece fikir belirtmek istedim nasıl yapılacagı hakkında bir bilgim bulunmamaktadır.
  • 01-09-2022, 12:58:44
    #4
    Lyra adlı üyeden alıntı: mesajı görüntüle
    email ve şifre için index ekleyebilirsiniz. Insert işlemini biraz uzatır ama select tarafında büyük performans sağlar.
    Teşekkür ederim hocam, birde konuda bahsetmemişim bir sorum daha olacak,

    Verilerin kaydını yaparken ne var ne yok ise olduğu gibi yüklesem. Daha sonra veritabanında bir sorgu çalıştırarak tekrar eden mail;pass ve user;pass verilerini buldurup silmemiz mümkün mü?
    Örneğin 150.000.000 adet veriden 34.000.000 adeti tekrar girilmiş bunları tespit edip silmesi ne kadar uzun sürebilir.

    tekcarem adlı üyeden alıntı: mesajı görüntüle
    Metin dosyasında aynı içerik kontrolu yapılabilirmi eklenmeden önce.
    Farklı farklı metin dosyaları var ise durum değişir.
    Yada farklı bir sunucuda kontrol işlemi gerçekleştirilip yeni bir metin dosyasına yazdırılıp oradan veri ekleme yapılabilir.

    Sadece fikir belirtmek istedim nasıl yapılacagı hakkında bir bilgim bulunmamaktadır.
    Teşekkür ederim hocam, Metin dosyalarında aynı verilerin tekrar edilmesinin önüne geçebiliyorum fakat son yaptığım kontrolde metin dosyasında 23.000.000 satır veri vardı bunların tekrarlarını temizlerken bile Notepad++ hafiften kafayı yiyor bazen kapanıyor. Bir şekilde metin dosyasının içindeki kontrolü hallediyorum fakat ilerde şöyle bir durum oluşacak.
    - Metin dosyası 1 için kontrol ettim tekrar veriler silindi ve yüklemeyi yaptım, buraya kadar herşey güzel.
    - Diğer gün metin dosyası 2 yi kendi içinde kontrol ettim ve yüklemeyi yaptım, burada sorun başlıyor.

    İki dosyada da 20 Milyon veri olduğunu düşünürsek Metin dosyası 1 ve Metin dosyası 2 nin içinde tekrarlanan veriler olması çok büyük bir olasılık iki dosyanın boyutuda çok büyük olduğu için karşılaştırıp tekrar silme işlemi yaptırabileceğimi zannetmiyorum. Vim gibi editörlerde bir yerden sonra sorun yaratacaktır.
  • 01-09-2022, 13:03:13
    #5
    çok uzun sürebilir. bir veri için bir milyar datayı kontrol etmek mi yoksa bir veri için sürekli artan bir datayı kontrol etmek mi? Tabii ki ikinci. Sürekli bir milyar arasında aramaktansa eklemeden önce araması çok daha performanslı olacaktır.

    Ya da hiç insert yapmadan python gibi alternatif bir dil kullanarak bu veri içerisindeki tekrar edenleri silebilirsiniz. Yükü php ve mysqlden almış olursunuz. Çok daha verimli.

    bkz: https://stackoverflow.com/questions/...large-datasets

    CyBerkeUnal adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim hocam, birde konuda bahsetmemişim bir sorum daha olacak,

    Verilerin kaydını yaparken ne var ne yok ise olduğu gibi yüklesem. Daha sonra veritabanında bir sorgu çalıştırarak tekrar eden mail;pass ve user;pass verilerini buldurup silmemiz mümkün mü?
    Örneğin 150.000.000 adet veriden 34.000.000 adeti tekrar girilmiş bunları tespit edip silmesi ne kadar uzun sürebilir.
  • 01-09-2022, 13:04:03
    #6
    Mail sütunu için, tablonuzda unique index oluşturun.
    Insert işleminde aynı kayıt varsa duplicate entry mesajı döndürür ve eklenmesini engeller.
    Mesajı verirse işlem durur bu yüzden ignore parametresini insert sorgunuza ekleyin böylece bu içerik var dese bile diğer insert işlemine devam eder

    Unique index oluşturma
    https://www.mysqltutorial.org/mysql-unique/
    Insert ignore kullanım örneği
    https://www.mysqltutorial.org/mysql-insert-ignore/

    Ayrıca insert işlemini tek tek değil multiple insert olarak yaparsanız dahada hızlandıracaksınız.
    https://www.sqlservertutorial.net/sq...multiple-rows/

    Milyarlık kayıttan bahsettiniz index için ram ihtiyacınız olacaktır

    Ayrıca db partition ilede veritabanını bölümlendirerek daha hızlı insert işlemleri yapabilirsiniz.

    Günün sonunda tüm bunların yanında cpu ve ram donanımınızda hız konusunda etkendir.
  • 01-09-2022, 13:13:11
    #7
    MCERAN adlı üyeden alıntı: mesajı görüntüle
    Mail sütunu için, tablonuzda unique index oluşturun.
    Insert işleminde aynı kayıt varsa duplicate entry mesajı döndürür ve eklenmesini engeller.
    Mesajı verirse işlem durur bu yüzden ignore parametresini insert sorgunuza ekleyin böylece bu içerik var dese bile diğer insert işlemine devam eder

    Unique index oluşturma
    https://www.mysqltutorial.org/mysql-unique/
    Insert ignore kullanım örneği
    https://www.mysqltutorial.org/mysql-insert-ignore/

    Ayrıca insert işlemini tek tek değil multiple insert olarak yaparsanız dahada hızlandıracaksınız.
    https://www.sqlservertutorial.net/sq...multiple-rows/

    Milyarlık kayıttan bahsettiniz index için ram ihtiyacınız olacaktır

    Ayrıca db partition ilede veritabanını bölümlendirerek daha hızlı insert işlemleri yapabilirsiniz.

    Günün sonunda tüm bunların yanında cpu ve ram donanımınızda hız konusunda etkendir.
    Cevabınız için teşekkür ederim hocam,
    Mevcut belleğim 16 GB buna bir 16 GB daha eklemeyi düşünüyorum. Ve depolama açısından sorun yaşadığım için M2 SSD almayı düşündüm Okuma/Yazma hızı normal kullandığım SSD'ye göre kat kat fazla olduğu için muhtemelen işlemler azda olsa hızlanacaktır.

    Unique index işlemini bende düşündüm fakat şöyle bir sorunumuz doğuyor bu durumda;

    berke@R10.Net;berke123
    berke@R10.Net;123berke

    Yapmak istediğim şey tamamen eşleşen mail;pass verilerinin tekrarını önlemek mail adresi aynı fakat farklı bir şifre içeriyor ise kayıtlar veritabanında tutulmaya devam edebilir.

    Normalde Kullandığım Kontrol Aşaması Bu Şekilde;
                            $query = $conn->query("SELECT * FROM user_pass WHERE data_user = '{$user}' AND data_pass = '{$pass}'")->fetch(PDO::FETCH_ASSOC);
                            if($query)
                            {
                              $tekrarlanan_user_sayi++;
                              echo '<div class="alert alert-danger" role="alert"><b>'.$user.'</b>'.' Kullanıcısı zaten aynı şifre ile veri tabanında kayıtlı, kayıt işlemi yapılamadı.</div>';
                            }
  • 01-09-2022, 13:20:38
    #8
    CyBerkeUnal adlı üyeden alıntı: mesajı görüntüle
    Cevabınız için teşekkür ederim hocam,
    Mevcut belleğim 16 GB buna bir 16 GB daha eklemeyi düşünüyorum. Ve depolama açısından sorun yaşadığım için M2 SSD almayı düşündüm Okuma/Yazma hızı normal kullandığım SSD'ye göre kat kat fazla olduğu için muhtemelen işlemler azda olsa hızlanacaktır.

    Unique index işlemini bende düşündüm fakat şöyle bir sorunumuz doğuyor bu durumda;

    berke@R10.Net;berke123
    berke@R10.Net;123berke

    Yapmak istediğim şey tamamen eşleşen mail;pass verilerinin tekrarını önlemek mail adresi aynı fakat farklı bir şifre içeriyor ise kayıtlar veritabanında tutulmaya devam edebilir.

    Normalde Kullandığım Kontrol Aşaması Bu Şekilde;
                            $query = $conn->query("SELECT * FROM user_pass WHERE data_user = '{$user}' AND data_pass = '{$pass}'")->fetch(PDO::FETCH_ASSOC);
                            if($query)
                            {
                              $tekrarlanan_user_sayi++;
                              echo '<div class="alert alert-danger" role="alert"><b>'.$user.'</b>'.' Kullanıcısı zaten aynı şifre ile veri tabanında kayıtlı, kayıt işlemi yapılamadı.</div>';
                            }

    Şöyle birşey tavsiye edebilirim.

    Hash adında bir sütun oluşturun. Bunu üstte belirttiğim gibi unique index yapın.


    Mail Ve şifreyi md5 veya güvenilir bir hash metoduyla birleştirin.
    Örnek md5($mail.$sifre)

    Hash sütununa bunu ekleyin.

    Sorgu yaparken hash ile kontrol edin.
  • 01-09-2022, 13:21:53
    #9
    Lyra adlı üyeden alıntı: mesajı görüntüle
    çok uzun sürebilir. bir veri için bir milyar datayı kontrol etmek mi yoksa bir veri için sürekli artan bir datayı kontrol etmek mi? Tabii ki ikinci. Sürekli bir milyar arasında aramaktansa eklemeden önce araması çok daha performanslı olacaktır.

    Ya da hiç insert yapmadan python gibi alternatif bir dil kullanarak bu veri içerisindeki tekrar edenleri silebilirsiniz. Yükü php ve mysqlden almış olursunuz. Çok daha verimli.

    bkz: https://stackoverflow.com/questions/...large-datasets
    Onun hakkında şöyle bir düşücem olmuştu hocam veritabanında hiç sorgu çalıştırmamak adına fakat buda yapılabilir bişey mi pek bir fikrim yok, şöyle bir örnek vermek istiyorum,

    Veri dosyası 1.txt 1GB
    Veri dosyası 2.txt 890MB
    Veri dosyası 3.txt 1.2GB

    Bu 3 metin dosyamız daha önceden veri tabanına benzersiz bir şekilde yazdırıldı buraya kadar sorun yok.

    Veri dosyası 4.txt 1GB , Bütün satırlar yukarıdaki 3 metin dosyası ile karşılaştırılacak ve tekrar eden satırlar Veri dosyası 4.txt içersinden temizlenecek ya da yeni bir metin belgesi olarak yazılacak. Böylelikle veri tabanında sorgu çalıştırmadan extra yük bindirmeden benzersiz verileri almış olacağım. Fakat 100 adet karşılaştırılacak metin dosyası olduğunu düşünürsek 80GB lık 100 adet metin dosyası ile 1GB metin dosyasını karşılaştırıp ayrıştırmak yapılabilecek birşey mi?