2016-03-21 15 views
-1

saklamak için mariadb kullanın, her gün en az 1.000.000 kayıt gerekir, her kayıt birkaç harfle ondan daha az onlara sahip. centos 7. mariadb 5.5 seçtim. motor innodb.gelecekteki piyasa verileri için (büyük sayı kayıtları)

[server] 
innodb_file_per_table=1 
innodb_flush_log_at_trx_commit=2 
innodb_buffer_pool_size=2G 
innodb_log_file_size=256M 
innodb_log_buffer_size=8M 
bulk_insert_buffer_size=256M 

i kayıtlarını eklediğinizde, o kadar hızlı değildir, ancak kabul edilebilir: my.cnf şu yapılandırmaya sahiptir. ama ihracat verisi verdiğimde, bazı GB'den daha büyük bir fiyat etiketi olduğunda çok yavaştır. gibi alanlar: id, teklif, sor, saat, xx, xx, id otomatik artışdır ve anahtardır. Aşağıdaki gibi benim sorgu sql: select * from table where enstrüman = "xx" ve zaman> = "xx" ve zaman < = "xx"

herhangi seçme performansını hızlandırmak için nasıl tavsiyelerde? Teşekkürler!

+0

Gerçekten çok fazla sayıda deyimi işlemeniz gerekiyorsa ve hızlı kalmaları gerekiyorsa, Solr http://lucene.apache.org/solr/ gibi bir şeyin uygulanmasına bakmalısınız. denediğiniz gibi pek çok bilgi, vb. –

+4

Karşılaştığınız sütunları indeksleyin, daha büyük bir sunucu edinin, vb. – ceejayoz

+0

@ StrahBehry, benim durumumda, veri depolamak için mysql/mariadb kullanmıştım. veriler gibidir: id: 1, araç: lme-cu, işlem günü: 20160321 soru: 33.33 teklif: 33,30 sorvolume: 1 bidvolume: 2. Tüm bilgiler küçük dize veya tamsayıdır. Sorunum, 100.000.000'den fazla kaydıma sahip olduğumda, sql sorgumla veritabanı çok yavaşlar. çoğunlukla 10000 kayıt sorgulamak için 3 dakikadan fazla mal olacaktı. Tam metin dizininden kaynaklanabileceğini okudum, çünkü '' '' in sözdizimini karşılaştırdım, sorguyu veritabanı performansını geliştirecek herhangi bir ipucu varsa bunu istiyorum. Teşekkürler. – yixuan

cevap

0

SELECT10'u uyarlamak için, InnoDB tablosunu oluşturun ve kümelenmiş PRIMARY KEY'u ayarlayın, böylece istenen satırlar ardışık olur. Bu muhtemelen INSERT işlemini yavaşlatır, ancak bu bir sorun değil - 12 ekleme/saniye kolayca işlenir.

Fakat bir an için başımdan geleyim - 1M satırları aynı anda gelir mi? Yoksa 7 saatten fazla mütevazı mı? Ya da ne? Hepsi bir seferde, büyük LOAD DATA yapmadan önce verileri PK'ye göre sıralayın.

Sorunuz PRIMARY KEY(instrument, time) için yalvarır. Ancak bir PK "eşsiz" olmalı; bu eşsiz mi? Aksi halde, benzersiz bir hale getirmek için başka bir sütun (id?) `U sona ermelidir.

Benzersiz ise, o zaman bir AUTO_INCREMENT; ondan kurtulmak. Bu gibi büyük tablolar için, indeks sayısını en aza indirgemek, sadece performans için değil, aynı zamanda hayatta kalmak için bile kritiktir.

Diğer şeyler

  • enstrüman Normale ... yapmak. Bu bir tablo var ve 65 K altında varsa, muhtemelen bir SMALLINT UNSIGNED (2 bayt) bir kimlik ile eşleyin. Yutma sırasında normalleştirmeyle ilgili daha fazla tartışma için bkz. my blog.
  • Yapabileceğiniz tüm alanları küçült - FLOAT (4 bayt) cazip, ancak yuvarlak hataları var. DECIMAL zor çünkü bir uçta kuruş stokları ve diğer tarafta BRK-A için endişelenmeniz gerekiyor.
  • PK'deki bu değişikliğin onlara zarar vermediğinden emin olmak için sorguların geri kalanına bakın.
  • 'u, kullanılabilir RAM'in yaklaşık% 70'ini ayarlayın (4 GB'den fazla RAM'in olduğunu varsayarak).
  • id'u AUTO_INCREMENT olarak tutmak zorundaysanız, INDEX(id); A_I'yı mutlu etmek için gereken her şey bu.
  • CHARACTER SET ascii'u utf8 bir yere ihtiyacınız olmadıkça kullanın.
  • Volume nadir durumlarda 4 milyaru geçebilir; ne yapacağını düşün.
  • PK sırasına 10K satır getirilmesi yalnızca birkaç saniye sürecektir. Bu uygulama için
  • FULLTEXT yararlı değildir.
  • PARTITIONing, muhtemelen yararlı değildir; Sorguların geri kalanını paylaşmaya özen gösterirseniz tekrar ziyaret edebiliriz.Diğer yandan, 'eski' verileri siliyor olacaksanız, o zaman PARTITIONing mükemmel bir fikirdir. Bakınız my partition blog.
+0

rick, öneri ve ipuçları için çok teşekkürler. enstrüman + tradingday için indeks yaptığımda, 4mins -> birkaç saniyeden daha hızlı gelişiyor gibi görünüyor. anlamaya çalıştığım bir başka dava da, masum masaların o kadar hızlı arttığı, her ay en az 2GB arttığı. Bu yüzden tüm eski verileri arşiv motoruna taşımayı düşünüyorum. ancak arşiv tablosu dizine eklenemiyor, yani bu arşiv tablosundaki verileri sorgulamak istersem sorun olur. – yixuan

+0

Bahsedilen bir sorgu, bir yıllık veri eklendikten sonra bile _almost_'ı hızlı olarak çalıştıracaktır. –

İlgili konular