• 23-01-2015, 20:20:20
    #1
    Arkadaşlar bir proje yapıyorum şuanda sitedeki tüm mesajları kayıt altına alıyor fakat çok fazla mesaj olacak. Mesela facebook ne yapıyor bu konuda ? Yani 1milyar (1.000.000.000) civarı mesaj olacak diye tahmin ediyorum. Bunların hepsini database kayıt etsem yavaşlama vb. olur mu sorgularda ? daha önce deneyen oldu mu ?
    Mesela 1milyar mesaj içinden "cem" adlı kullanıcının mesajlarını çektiriyorum diyelim. Bunu ararken herhangi bir yavaşlama olur mu ?
  • 23-01-2015, 20:41:30
    #2
    Facebook'daki sunucu kimde var hocam, uçak gibi makine şaka bir yana, eğer ben böyle bir sistem yapsaydım mysql değilde json kullanırdım. Verileri json'da saklardım.. SSD ile çok hızlı bir şekilde okuma / yazma yapabilirdim o zaman diye düşünüyorum
  • 24-01-2015, 00:56:43
    #3
    Facebook ya da Google gibi büyük firmalar bu iş için Ada kiralayıp orayı Datacenter yapıyorlar. Bence bunu şimdi düşünmeyin Bu kadar büyük bir sistemin güncelleştirmeleri v.s illaki olacaktır. Facebook ilk kurulduğunda normal mysql kullanıyordu. Şimdi sırf dataları ekrana hızlı gelsin diye milyon dolarlar harcıyor.
  • 24-01-2015, 13:02:14
    #4
    cemsina adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar bir proje yapıyorum şuanda sitedeki tüm mesajları kayıt altına alıyor fakat çok fazla mesaj olacak. Mesela facebook ne yapıyor bu konuda ? Yani 1milyar (1.000.000.000) civarı mesaj olacak diye tahmin ediyorum. Bunların hepsini database kayıt etsem yavaşlama vb. olur mu sorgularda ? daha önce deneyen oldu mu ?
    Mesela 1milyar mesaj içinden "cem" adlı kullanıcının mesajlarını çektiriyorum diyelim. Bunu ararken herhangi bir yavaşlama olur mu ?
    Redis kullanabilirsiniz mysql'den daha hizli diyorlar.MongoDB'de iyi gibi.
  • 24-01-2015, 13:10:36
    #5
    Facebook yıllar önce aylık 135 milyar mesajı depoladığını söylüyordu. Hbase diye bir veri tabanını kullanıyor. Benim size önerim aerospike bu konuda. Depolama ve mesajların kullanıcılara anlık iletimi(100ms'den kısa sürede) konusunda destek olabilirim.
  • 24-01-2015, 13:30:24
    #6
    kingofseo adlı üyeden alıntı: mesajı görüntüle
    Redis kullanabilirsiniz mysql'den daha hizli diyorlar.MongoDB'de iyi gibi.
    Redis bir key => value cache store'dur. Memcached gibi belirlenen değerleri ram'de tutar. Sırası geldiğinde de siler ve yerine sıranın başından yeni değer ekler. Mysql ise bir vertiabanı sistemidir. Elma ile armut'u ayırt etmemiz gerekir.
    (Bknz: Redis | Memcahed | Redis vs Memcached)

    Gelelim Konumuza; Mysql'deki veriler'in büyüklüğü önemlidir elbette; ama Sql sorgularınızı düzgün çalıştırırsanız mysql çok yüksek miktarlarda satırlar'da dahi sorun çıkarmaz. Neden sorun çıkarmaz;

    Örneğin 10.000.000 Satırlı bir tablomuz olsun, eğer buradaki 10.000.000 satırı bir anda çekmeye çalışırsanız maalesf ki mysql buna elinizdeki imkanlarınızla cevap veremeyebilir.

    Fakat buradaki verilerin hepsini birden tek sorguda almanız zaten anlamsız olacaktır. Çünkü veri her ne olursa olsun bunu illaki küçülterek, parçalayarak kullanıcıya sunmak daha mantıklı olacaktır.
    (Bknz: PHP Pagination Class)

    Neticede 10.000.000 veri içeren bir veriyi de kullanıcının tarayıcısı ve kullanıcının makinası da kaldırmayabilir. Bir örnek ile somutlaştıracak olursak; 10 ton kaldırma kapasitesi olan bir kamyona 100 ton yük yüklemeye benzetebiliriz.

    Ayrıca Facebook veritabanı olarak mysql kullanır, key=>value cache and store olarak da Memcached kullanır. Fakat bunlar piyasadakilerden elbette ki farklıdır. Kendi sistemlerine uygun olarak yazılım mühendisleri ve dba'ları tarafından sürekli olarak geliştirilmektedir.
    (Bknz: Facebook & Mysql) |
    Facebook & Memcached )

    Bunun yanında çok büyük bir pornografi sitesi önbellekleme için de redis'i kullanmaktadır. (: Düşünün bir kere binlerce video var ve yüzbinlerce insan bunları izlemek için sunucularınıza sürekli istek gönderiyor.
    (Bknz: Youp.rn & Redis)

    Umarım yardımcı olur.

    Edit: İleri seviyede mysql'de veri depolama ve ayrıca mysql master-slave mantığını kavramak isteyenler için Buradaki yazı faydalı olacaktır. (Makale İngilizcedir.)
  • 24-01-2015, 13:34:43
    #7
    hddntha adlı üyeden alıntı: mesajı görüntüle
    Redis bir key => value cache store'dur. Memcached gibi belirlenen değerleri ram'de tutar. Sırası geldiğinde de siler ve yerine sıranın başından yeni değer ekler. Mysql ise bir vertiabanı sistemidir. Elma ile armut'u ayırt etmemiz gerekir.
    (Bknz: Redis | Memcahed | Redis vs Memcached)

    Gelelim Konumuza; Mysql'deki veriler'in büyüklüğü önemlidir elbette; ama Sql sorgularınızı düzgün çalıştırırsanız mysql çok yüksek miktarlarda satırlar'da dahi sorun çıkarmaz. Neden sorun çıkarmaz;

    Örneğin 10.000.000 Satırlı bir tablomuz olsun, eğer buradaki 10.000.000 satırı bir anda çekmeye çalışırsanız maalesf ki mysql buna elinizdeki imkanlarınızla cevap veremeyebilir.

    Fakat buradaki verilerin hepsini birden tek sorguda almanız zaten anlamsız olacaktır. Çünkü veri her ne olursa olsun bunu illaki küçülterek, parçalayarak kullanıcıya sunmak daha mantıklı olacaktır.
    (Bknz: PHP Pagination Class)

    Neticede 10.000.000 veri içeren bir veriyi de kullanıcının tarayıcısı ve kullanıcının makinası da kaldırmayabilir. Bir örnek ile somutlaştıracak olursak; 10 ton kaldırma kapasitesi olan bir kamyona 100 ton yük yüklemeye benzetebiliriz.

    Ayrıca Facebook veritabanı olarak mysql kullanır, key=>value cache and store olarak da Memcached kullanır. Fakat bunlar piyasadakilerden elbette ki farklıdır. Kendi sistemlerine uygun olarak yazılım mühendisleri ve dba'ları tarafından sürekli olarak geliştirilmektedir.
    (Bknz: Facebook & Mysql) |
    Facebook & Memcached )

    Bunun yanında çok büyük bir pornografi sitesi önbellekleme için de redis'i kullanmaktadır. (: Düşünün bir kere binlerce video var ve yüzbinlerce insan bunları izlemek için sunucunuza sürekli istek gönderiyor.
    (Bknz: Youp.rn & Redis)

    Umarım yardımcı olur.
    Yararli makale olmus tesekkürler.
  • 06-02-2015, 23:13:04
    #8
    hddntha adlı üyeden alıntı: mesajı görüntüle
    Redis bir key => value cache store'dur. Memcached gibi belirlenen değerleri ram'de tutar. Sırası geldiğinde de siler ve yerine sıranın başından yeni değer ekler. Mysql ise bir vertiabanı sistemidir. Elma ile armut'u ayırt etmemiz gerekir.
    (Bknz: Redis | Memcahed | Redis vs Memcached)

    Gelelim Konumuza; Mysql'deki veriler'in büyüklüğü önemlidir elbette; ama Sql sorgularınızı düzgün çalıştırırsanız mysql çok yüksek miktarlarda satırlar'da dahi sorun çıkarmaz. Neden sorun çıkarmaz;

    Örneğin 10.000.000 Satırlı bir tablomuz olsun, eğer buradaki 10.000.000 satırı bir anda çekmeye çalışırsanız maalesf ki mysql buna elinizdeki imkanlarınızla cevap veremeyebilir.

    Fakat buradaki verilerin hepsini birden tek sorguda almanız zaten anlamsız olacaktır. Çünkü veri her ne olursa olsun bunu illaki küçülterek, parçalayarak kullanıcıya sunmak daha mantıklı olacaktır.
    (Bknz: PHP Pagination Class)

    Neticede 10.000.000 veri içeren bir veriyi de kullanıcının tarayıcısı ve kullanıcının makinası da kaldırmayabilir. Bir örnek ile somutlaştıracak olursak; 10 ton kaldırma kapasitesi olan bir kamyona 100 ton yük yüklemeye benzetebiliriz.

    Ayrıca Facebook veritabanı olarak mysql kullanır, key=>value cache and store olarak da Memcached kullanır. Fakat bunlar piyasadakilerden elbette ki farklıdır. Kendi sistemlerine uygun olarak yazılım mühendisleri ve dba'ları tarafından sürekli olarak geliştirilmektedir.
    (Bknz: Facebook & Mysql) |
    Facebook & Memcached )

    Bunun yanında çok büyük bir pornografi sitesi önbellekleme için de redis'i kullanmaktadır. (: Düşünün bir kere binlerce video var ve yüzbinlerce insan bunları izlemek için sunucularınıza sürekli istek gönderiyor.
    (Bknz: Youp.rn & Redis)

    Umarım yardımcı olur.

    Edit: İleri seviyede mysql'de veri depolama ve ayrıca mysql master-slave mantığını kavramak isteyenler için Buradaki yazı faydalı olacaktır. (Makale İngilizcedir.)
    Şimdi diyelim 10.000.000 tane mesaj var. Database den kullanıcı adı cemsina olanlar gelsin diye komut verdiğimde MySQL de sorun çıkmaz mı ? (buradan sadece 5 tanesi bizim kullanıcı adımızı içeren mesajlar olsun)
  • 09-02-2015, 15:22:39
    #9
    cemsina adlı üyeden alıntı: mesajı görüntüle
    Şimdi diyelim 10.000.000 tane mesaj var. Database den kullanıcı adı cemsina olanlar gelsin diye komut verdiğimde MySQL de sorun çıkmaz mı ? (buradan sadece 5 tanesi bizim kullanıcı adımızı içeren mesajlar olsun)
    Yaptığın sorguya göre değişir. Eğer tabloların indeksliyse ve çok fazla join kullanmadıysan, %% wildcard'ını kullanmadınsa, büyük bir yük oluşturacağını sanmam. Ayrıca mesajlajma uygulaması için mesajların tutulduğu bölümde sadece mesajları ve yazanların id'lerini tutsan tablondaki ağırlık daha küçük olur. JOIN mantığı bunun için vardır. Makinanın gücü de önemli. Buna bağlı olarak Memcached veya Redis kullanırsan işlemin daha da hızlanır.