Bellekte bir 200MB iletmenin veri yapısını korumak ve bir komut dosyası erişmek için bir yolu var mı?

5 Cevap php

Ben 9 milyon IP'leri bir listesi var ve karma tabloları bir dizi, ben belirli bir IP bu listede olup olmadığını döndüren bir sabit zaman işlevi yapabilirsiniz. PHP bunu yapabilir miyim? Eğer öyleyse, nasıl?

5 Cevap

Bu soru hakkında ilginç şey gidebilirsiniz yönde sayısıdır.

Önbelleğe alma çünkü verilerin büyük bir set ve üzerinde sorguları nispeten düşük sayıda en iyi seçenek ise emin değilim. İşte birkaç fikir.

1) Build a ram disk. Ramdisk bölüm kullanmak için MySQL veritabanı tablo bağlamak. Ben bu hiç denemedim, ama denemek için eğlenceli olurdu.

2) Linux, genellikle çok hızlı bir dosya sistemi vardır. Dosyalarının içine kayıtları kırılır yapılandırılmış bir dosya sistemi oluşturmak, ve sadece file_get_contents () veya file_exists () arayın. Tabii ki bu çözüm de eğlenceli olacağını dosya sistemi, inşa etmek ve korumak için gerektirecektir. rsync bugüne kadar canlı dosya sistemini tutmak yararlı olabilir.

Örnek:

/002/209/001/299.txt

<?
$file = $this->build_file_from_ip($_GET['ip']);
if(file_exists($file)) {
    // Execute your code.
}
?>

Benim için bu bir Bloom Filtre için ideal bir uygulama gibi geliyor. ASAP bunu halletmek yardımcı olabilir sağlanan bağlantılardan bakabilirsiniz.

  1. http://github.com/mj/php-bloomfilter
  2. http://code.google.com/p/php-bloom-filter/

Ben memcache atmadan muhtemelen en iyi / en hızlı yöntem olacağını düşünüyorum.

Sqlite içine dosya okuma bir seçenek olurdu böylece aramalarını hızlandırmak endeksler yararlanabilir?

Aksi takdirde bir seçenek memcached ama saf php aramaları ile bunu eğer varlığını kontrol gitmek istiyorum nasıl bilmiyorum (doğrusu benim tahminim yavaş)

Eğer böyle bir NoSQL çözüm denedim Redis? Tüm veri seti bellekte yönetilmektedir.

İşte bazıları benchmarks.