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
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.
Nasıl bir dosya satır okumak için php ...
Nasıl bir karakter yerine Vim bir yeni...
Nasıl baskı yeni satır veya boşluk olm...
Nasıl Node.js çevre değişkeni okumak i...
Nasıl bir yöntem adı ve satır numarası...