Nasıl piyasa verileri 7.3 milyar satır (okumak için optimize edilmiş) depolamak için? | Netgez.com
SORU
22 Mart 2012, PERÅžEMBE


Nasıl piyasa verileri 7.3 milyar satır (okumak için optimize edilmiş) depolamak için?

(2012-1998)*(365*24*60)*1000 = 7.3 Billion satır civarında toplam 1998 yılından bu yana 1000 hisse senetlerinin 1 dakika, bir veri kümesi var.

En çok (™.9) tek yerine getireceÄŸimokuyunistekleri.

Bir db bu veri depolamak için en iyi yolu nedir?

  • 7.3 B satır ile 1 büyük masa mı?
  • 1000 tablolar (her bir hisse senedi simgesi için bir tane) 7.3 M satır her ile?
  • veritabanı motoru herhangi bir öneri? (Amazon RDS' MySQL kullanmayı düşünüyorum

Bu büyük veri setleri ile başa çıkmak için kullanılan değilim, bu bana öğrenmek için mükemmel bir fırsattır. Bir çok yardım ve tavsiye takdir edeceklerdir.

Düzenleme:

Bu örnek, satır:

'XX', 20041208, 938, 43.7444, 43.7541, 43.735, 43.7444, 35116.7, 1, 0, 0

Sütun 1 hisse senedi sembolü, sütun 2 tarih, sütun 3 dakika, dinlenme açılış-en yüksek-en düşük-kapanış fiyatları, ses ve 3 tamsayı sütun vardır.

Sorguların çoğu gibi olacak "bana 12 Nisan 2012 12:15 arasında KURULUŞUDUR fiyatları Vermek ve 13 Nisan 2012 12:52"

Hakkında donanım: bu konuda esneğim yani Amazon RDS kullanmayı planlıyorum

CEVAP
31 Mart 2012, CUMARTESÄ°


Veritabanları sürekli değişen büyük karmaşık bir şema olduğu durumlar içindir. Sadece bir "masa" ile bir el-tam basit sayısal alanlar. Bu şekilde yapardım:

C/C yapı kayıt formatı tutmak için hazırlayın

struct StockPrice
{
    char ticker_code[2];
    double stock_price;
    timespec when;
    etc
};

N kayıt numarasıdır sonra boyutu(StockPrice[N]) hesaplar. (64-bit bir sistemde) sadece bir kaç yüz bir iş olmalı, ve $50 bir disk üzerine uyacak.

Bu boyuttaki bir dosyayı kesmek ve linux veya windows CreateFileMapping () belleğe yüksek:

//pseduo-code
file = open("my.data", WRITE_ONLY);
truncate(file, sizeof(StockPrice[N]));
void* p = mmap(file, WRITE_ONLY);

StockPrice için mmaped bu pointer* * * * veri dizisi dolduran bir geçiş yapmak. En yüksek yakın, ve şimdi daha sonra tekrar mmaped bir dosya içinde koca bir ikili dizi veri var.

StockPrice* stocks = (StockPrice*) p;
for (size_t i = 0; i < N; i  )
{
    stocks[i] = ParseNextStock(stock_indata_file);
}
close(file);

Şimdi tekrar salt okunur herhangi bir programdan ve veri hazır olacak yüksek

file = open("my.data", READ_ONLY);
StockPrice* stocks = (StockPrice*) mmap(file, READ_ONLY);

// do stuff with stocks;

Şimdi yapılar bellek dizisi gibi davranabilirsiniz. Dizin veri yapıları "sorgu". ne bağlı olarak çeşitli oluşturabilirsiniz Çekirdek veri delicesine hızlı olacak diskten şeffaf/takas ile ilgileneceğiz.

Eğer erişim belirli bir desen (örneğin bitişik tarih) bekliyorsanız disk sırayla vuracak kadar en iyi bu sırayla diziyi sıralamak için.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • kndx

    kndx

    11 Mart 2006
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007