Elimizde 5-10 milyondan fazla veri var bu verilerin icinde surekli kullanici arama yapmasi gerek. Sorgumda like ve kategori id kullaniyorum fakat 600 k veride 300 ms suruyor veri cogalinca mysql fazla dayanmayazaktir ne gibi yontemler kullanabilirim
Innodb kullaniyorum myisam full text search deneyecegim bunun disinda ne kullanabilirim
İsmail Küçükbayram
İ
Kategori_id ile like yapmiyorum sorgum su sekilde kat_ id IN(1,2,3,4) AND LIKE araba
full text e gec
ayrica stored procedures #
Stored procedures daha once duymadim tam olarak nedir acaba mantigi nedir
mysql veritabanı motoruna gömülmüş. Fonksiyonlar bir çok cachelenmiş sorgudan daha hızlı çalışır. Yani sorgu yerine sorguyu içeren fonksiyon çalıştırmak
Ornek bir kullanim mevcutmu acaba ne kadar performansli olur acaba ?
http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx?fref=gc.. Hız bayağı değişir diye tahmin ediyorum. Tabi veritabanı sunucunun tablo yapın ve sorguna gore degısır. Eğer yapı ve sorguyu verirsen belki daha basit bir çözüm bulunur
Eve geince bakacagim bunada
Stored procedures siz yeni bir veri ekleyene kadar önbellekleme yapar. Ekleme yaptığınızda sadece tabloyu çalıştırır, böylece performans artmış olur.
10 milyon veride ortalama hiz ne olur acaba ?
verii nasıl bir veri. Sorgu nasıl bir sorgu. İndexler nasıl. Mysql motorunun ayarları cache size vs leri işlemci vs sunucunun nasıl bunları bilmeden bir şey söyleyemeyiz.
Veri ornek => kat_id 1-45 aradi bulunmakta arama adli sutun ise araba halici oglu mobilya gibi kelime veya cumleler bulunmakta, sorgu ustte atmistim zaten eslesen 45 icerigi cekiyorum. İndexler kat_id ve arama sutunu ayni index icinde mysql motoru ayarlarinaa bakmadim maalesef
kat id 1-45 yani string olarak mı tutuyorsunuz
Hayir int olarak tutuluyor
1-45 min 1 max 45 anlamina geliyor
Yani 1 ile 45 arasi kat id leri tutuyorum
nedense iiçimden bir ses. Veritabanı yapınız yanlış gibime geliyor n muhabbeti
Yanlislik birsey sanmiyorum tabloda 6 sutun var 2 si bunlar 1 tane id sutunu 1 tane userid 1 tane tarih ve 1 tane ip baska birsey bulunmamakta
genel 1 yapıyı sql export yapıp atarmısın bakalım
1 dk bekleyin
CREATE TABLE `im_markalar` ( `id` int(11) NOT NULL, `userid` int(11) NOT NULL, `markaid` int(11) NOT NULL, `markaname` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL, `tarih` int(11) NOT NULL, `ip` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; #
INSERT INTO `im_markalar` (`id`, `userid`, `markaid`, `markaname`, `tarih`, `ip`) VALUES (1, 1, 1, 'arabam', 0, '111'), (2, 1, 40, 'araba', 1499241899, '1232'), (3, 1, 22, 'vxih', 1499241899, '1232'),
ALTER TABLE `im_markalar` ADD PRIMARY KEY (`id`), ADD KEY `markaid` (`markaid`,`markaname`(191)), ADD KEY `userid` (`userid`); #
tablo - veri ekleme - indexler
Bu tabloda çalıştırdığın sorguyu ve amacını da yazar mısın?
SELECT * FROM tablo WHERE markaid IN(?,?,?,?,?,?,?) AND markaname LIKE araba LIMIT 45 #
Bu şekilde sorgu index kullanamıyor görünüyor.
Burak Gozutok aynen
NASIL Kullanmam gerekli yanlış olan ne ?
IN i kaldırıp tek id verince kullanıyor. Ne yapmaya çalıştığını söyleyebilir misin tam olarak? Hem markaid verip hem markaadi like la aramak biraz değişik geldi bana.
Burak Gozutok amacım kullanıcın seçtiği kategorilere göre yazdığı kelimeyi aramak.
markaid = kategori öyle mi?
Burak Gozutok evet öyle
Şu şekilde dener misin? SELECT id, userid, markaid, markaname, tarih, ip FROM im_markalar FORCE INDEX (markaid) WHERE markaid IN (1, 2, 3) AND markaname LIKE '%araba%' LIMIT 45;
Mümkün olduğunca SELECT * kullanmaktan kaçının.
select * örnek olarak verdim normal olarak kullanmıyorum. 1-2 dk bekleyin deniyorum.
eve geçtiğim için projeyi pcye kuruyorum deneyince sizi etiketliyeceğim.
değişen birşey yok maalesef
Şu şekilde dener misin? SELECT id, userid, markaid, markaname, tarih, ip FROM (SELECT id, userid, markaid, markaname, tarih, ip FROM im_markalar WHERE markaid IN (1, 2, 3)) tmp WHERE markaname LIKE '%araba%' LIMIT 45;
1.4 milyon veride 1 veri buluyor süre: 515 ms
Sunucu özellikleri nedir?
1 gb ram 1ghz işlemci italya lokasyon vps
Disk?
20 gb ssd
Üzerinde mysql dışında birşey çalışıyor mu?
hayır .
daha önce sphinx search kullandınızmı ?
Elastic kullanmıştık
elastic ücretlimidir ve benim sistueme uygunmudur sizce ?
ücretsiz, uygundur neden olmasın. Biz detaylı cv arama için kullanmıştık
bir türlü uygun sistemi bulamadım 2-3 saattir araştıyorum özelden ekleyip yardım edebilirmisiniz acaba
yalnız bu 500 ms sorguya network süresi dahil mi hariç mi o da önemli. Bence sunucu konfigurasyonunu da yükseltmekte fayda var. Bu kadar yopun data olacaksa sürekli hayatta kaldırmaz zaten
şuan 1 local ve 1 test sunucusunda deniyorum proje bitince daha iyi bir sunucuya geçirirliecek