Karma dizinler ne zaman makul hale gelir?


4

MySQL yerel olarak karma dizinleri desteklememektedir.Dolayısıyla, sözde karma sütun oluşturmak ve karma sütun üzerinde bir dizin oluşturmak biraz düşünmek ister.

Ve eğer metin alanı uzunsa, kargaşanın ihtiyaç duydukları ek yüke değdiği anlaşılıyor.Fakat metin, karmaşayı düşünmeye başlamak için ne kadar sürmeli?

128bit karma kullanmak istersem, bir metin sütunu için kaç karakter eşik yeterli olur?

DüzenleBaşka bir https://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram listelenen ayrıntılar belki yararlı olabilir https://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram

  0

İhtiyacın nedir?Dizin, yalnızca sorgu en iyi duruma getiricisinin kullanacağı biçimde sorgular olduğunda devreye girer.Söz konusu verilerin niteliği nedir?Bu verileri içeren ne tür sorgular yapacaksınız? 14 eyl. 112011-09-14 18:18:53

  0

İşte projenin açıklaması http://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram 14 eyl. 112011-09-14 18:49:42

3

Diski kaydetmeye başladığında makul olmaya başlar.Fakat aynı zamanda hesaplama gücünüzü almaya başlar.

Günümüzde disk alanı ucuz olarak kabul edilir, ancak SSD kullanıyorsanız o zaman o kadar ucuz değil.Tam eşleşmeye ihtiyaç duyduğunuz için çok fazla CPU almaz, bu yüzden daha iyi bir seçenek olabilir.

Ve hash kullanımını tatmin edecek metin sütununun uzunluğu hakkındaki sorunuzun cevabı, DBA'nın sisteme yükleme yeteneğinden başlayarak birçok faktöre bağlı olarak değişebilir.

Fakat eğer hash kullanarak RAM'in% 50'sinden fazlasını kurtarırsanız ve toplam RAM tasarrufu en az 2GB ise, o zaman bu yolu kullanmanın belki de gereksiz bir prova olması gerektiğini düşünüyorum


3

Karma dizini istemek için nedenlerinizin ne olduğundan emin değilim.

Fakat eğer metin/varchar sütunlarını indekslemek istiyorsanız MyISAM/full-text ile gidebilir ya da Sphinx veya Lucene gibi harici bir şeyler kullanabilirsiniz.

Alternatif olarak, başka birinin karma sürümüyle ek bir sütun oluşturabilir ve 1000 bayt veya daha kısa bir süre boyunca MySQL tarafından indekslenebilir.

Umarım sorunuzu cevaplamışımdır.

  0

Sözde hash endeksine bakmamın nedeni, masamın 150'den fazla milyon kayıt içermesi ve sınırlı belleğe (8 GB) sahip olmama bağlı olmasıdır, bu yüzden indekslerimi optimize etmek istiyorum ve metin sütununa endeks koymak istemiyorum çünkü çok fazla yer VERİ DEPOSU. 14 eyl. 112011-09-14 17:55:51

  0

Bir metin sütununun karakterinin ne kadarını indekslemek istediğinizi belirtebilirsiniz (ve belirtmelisiniz).Mytextcolumn (1000) - 1000'de olduğu gibi limit.MySQL'in bellek kısmını kullanmasına izin verirdim, çünkü bu tarafta çok iyi.Alternatif olarak, bunlar için Sfenks kullanmak muhtemelen iş için en uygun araç olacaktır. 15 eyl. 112011-09-15 06:58:59

  0

Neden hash sütunu oluşturmak ve hash sütunu üzerine benzersiz bir sınırlama koymak yerine değişken uzunluğa sahipken neden metin sütununa dizin koymalıyım?Dizini karma sütununa koymadaki tek sorun çarpışmayı olabildiğince düşük seviyeye indirmek. 15 eyl. 112011-09-15 16:42:11

  0

Başka bir karma sütun oluşturabilir ve dizine ekleyebilir, bu şekilde aramak için uygulamanıza kendi kodunuzu ekleyebilirsiniz.Sadece bunun başka araçlar kullanılarak çözülmüş olan ve büyük ölçüde diğer insanlar tarafından doğrulanan bir problem olduğunu söyleyebilirim.Eğer yolunuzun işe yarayıp yaramadığını görmek istiyorsanız, o zaman tüm anlamım, bir deneyin. 16 eyl. 112011-09-16 10:41:14

  0

Aslında bu araçlar sfenks gibi tam metin arama çözümü içindir.Ama 16 bayt karma alınmasının ne zaman mümkün olacağını bilmek burada daha çok ilgileniyorum.Gibi, 100 baytlık metin sütunu depolamak yerine (indeks eklendiğinde) 16 baytlık kullanımına değer.Ve en önemlisi, yalnızca tam eşleşmenin aralık taramaları gerektirmemesi gerekir. 16 eyl. 112011-09-16 18:45:01


0

Açıklamanızı okuduktan sonra bir karmanın ne kadar anlamlı olacağını görebiliyorum.Ancak, bellek hakkında konuştuğunuzda, bir indeks sütununun kullanımı, büyük bir veri setinin aranmasını imkansız kılmaz.MySQL'in temel indeks teknolojisi btree'dir.Btrees bölmek ve fethetmek.

Verebileceğim özel tavsiye şudur: Bir md5() karma kullanacağınızı varsayalım.Maksimum verimlilik için hash değerini, hash'ın bir char (32) olduğu innodb motor tablolarının birincil anahtarı yapmalısınız.İnnodb kümelenmiş indekslere sahip olduğundan, veriyi almak disk okumalarından tasarruf sağlayacaktır ve md5() hash sonucunun hiçbir zaman değişmediği için yapabileceğiniz gibi bir karakter kullanırken yapılması gereken işler de azalır. .

  0

Amaç RAM'den tasarruf etmek olduğunda InnoDB kullanmak akıllıca bir karar olur mu? 15 eyl. 112011-09-15 16:44:51