Big Data İçin Database Seçimi
-
Merhaba,
elimde sürekli büyüyen verilen var ve mysql'e attığım sorgular artık 4 saatte cevap dönüyor.
MongoDB ve Cassandrayı inceledim sorularınızın sabit olması gerekiyor yoksa hızlı olmaz NoSql'lerde yazılmış genelde.
Sorguya göre tablo yapısı oluşturulmuş.
Benim ne gibi bir sorguya cevap döndüreceğim belli değil bunun için hangi veritabanını incelememi önerirsiniz yardımcı olur musunuz?
Ek: tabiki de ücretsiz , Oracle gibi big data big money tarzı olmasın lütfen...
-
aslında nosql çözümlerinde tuttugun veri tipi ve yapıların bir birleriyle ilişkisi önemli. Biraz ne tür birşey aradığından neden sürekli değişen bir sorgu türün olduğundan bahsedersen daha iyi yardımcı olmak isterim.
Genelde Cassandra ile big data projelerinde çalıştım ve hepsinden memnun kaldım sen tüm objesi alıp içerisinden jsonla temizlesende olur.
-
NoSQL dediğin gibi genelde sorguya göre veritabanı oluşturarak performansı arttırıyor. RDBMS'lerin sorunu joinden çıkıyor.
Elinden geldiğince denormalize edip sorgu süresini kısaltabilirsin.
Yada in memory çözümlere bakabilirsin belki. Sonuçta IO'yu ortadan kaldırman bile büyük hız kazandıracaktır.
Yada Hadoop filan gibi distributed computation imkanı sağlayan çözümlerle map/reduce ile daha hızlı sonuç elde etmeye çalışabilirsin.
Ancak eminim senin case'ini yaşamış insanlar vardır. Google'da yeterli aramayı yaptığına eminmisin?
-
ne kadar işine yarar ama graph data da kullanabilirsin ek olarak söylediklerine daha önce baya bi nosql çözümü kullandık
neo4j ye bakabilirsin
bunun haricinde couchdb ye bakabilirsin ve de memcachdb..
bunlarda zaten strict schema olmadığı için sorun yok istediğinde.. @sandman ın dediği gibi ben de cassandra dan memnunum
-
Data büyük değildir server küçüktür. Ne sistemler mysql kullanıyor hiç sorunları yok. 1-2 gb sonrasına herkes bigdata demeye başladı.
-
sql optimizasyonu mysql ayarlarını değiştirin.
Örneğin en çok kullandığınız tablolarla id based patitioning yapın. Tabi sql sorgularını buna göre optimize edin.
Rand() fonksiyonun alternatifleri var onu kullanın.
Birde mysql log'dan uzun süren sql sorgularını analiz edin.
Sistem dediğin hemen değiştirilmez.
Ayrıca NOSQL gibi çözümler Document based sistemler için uygun. Yani götü başı belli olmayan veriler için uygun. Her zaman performanslı olacak diye birşey yok.
Ne kadar veriniz var bilmiyorum ama koskoca ülke satın alabilecek firmalar dahi mysql kullanabiliyorda siz mi kullanamıyorsunuz. Ya yeterli donanım yoktur ya da yeterli nitelikli iş gücü yoktur.
http://dev.mysql.com/doc/refman/5.1/en/partitioning.html
-
sql server kullanıyorum, 2 milyon satır oldu bi sorgunun süresi yaklaşık 2 dakika, daha optimize nası yapılır bilmiyorum, burdan bişeyler çıkar gibi msjım bulunsun:)
-
eğer 100 milyon satırın veya yarım terabayttan fazla datan yoksa big data çözümlerine pek bulaşmamanı öneririm. cassandra dışında adamakıllı bir alternatifin de yok bedava birşey istiyorsan çünkü. onda normalde join falan yok ama eğer hadoop veya spark kullanırsan sql kadar güçlü bir sorgulama yapısı var. ama dediğim gibi çok imkanın varsa kaçınmaya çalış. mysql'i bilmiyorum da postgresql'de güzel bir sharding sistemi var mesela. o da olmadı alabileceğin en güçlü makineyi alırsın. big data çözümleri her türlü pahalıdır çünkü.
bir alternatif olarak citusdb var postgresql'i distributed yapmış adamlar ama en son denediğimde pek stabil değil gibiydi.
-
Öncelikle cevaplar için herkese teşekkür ederim.
Günlük şu andaki ortalama datam txt'ye kaydettiğimde toplamda 20G ye tekabül ediyor.
Ayda 600G ediyor son 3 yıldır data tutulduğunu varsayarsam gayet güzel bir big data oluyor bence.
Yaklaşık 30 Farklı serverdan ve projeden gelecek veriler bu yüzden sorgularımda çok farklı ve değişik olabiliyor.Şöyle bir örnek sallayım;
ayın 30'unda akşam yemeğinde pilav yerken yanında ayran içmişlerin istatistiğinin çıkartılması 1. sorgum.
ayın 30'unda akşam yemeğinde eşiyle yemeğe gitmiş olanların çocuklarını evde bırakmış olmaları 2. sorgum.
ikiside benze datalar içeriyor ama bildiğim kadarıyla Cassandraya bunu aynı dataları farklı yolla indexleyerek yani 2 farklı collection yaparak koymam gerekiyor değil mi?
Bu 2 sorgu üzerinden nasıl gidebiliriz biraz daha teknik yardım edermisiniz?EK: neo4j de biliyorum ama onda ki node sayısını ne olarak almalıyım sence mesela insanların her birini alsam milyon tane node olur elimde ne kadar sürede cevap verir bu durumda?
-
Big data olayını hiç bilmiyorum, aklım da almıyor unorganised datayla nasıl iş yapılacağını
Bilale anlatır gibi anlatırmısınız ya? farklı yapılarda farklı databaseler ve tablolar var, bunlardan nasıl ööle bir sorgu çekiyorsunuz?
örnek sorgu cümleleri verirmisiniz? yani tsql gibimi sorgulanıyor?
o database join yapmıyorsa ne bok yapior =) düz text searchmi yapıyor indexing yapıp?
Not: eğer işime yarar bişeyse kafamı duvarlara vuracağım çünkü oturup yeni dbms yazdım farklı dblerde iş yapmak için farklı dbleri sanal tabloda birleşik gibi gösteren virtual database engine yaptım kendime.
HolyOne tarafından 25/Eyl/14 10:31 tarihinde düzenlenmiştir -
neo4j için, biz mesela 1900 lü yıllardan günümüze kadar yapılmış filmlerin oyuncuları, film bilgileri (çekim yeri,zaman), oyuncu bilgileri (doğduğu yer, doğum yılı) ve oyuncular arasındaki ilişkilerin olduğu bir sistem için yazılım geliştirdik. Haliyle çok data vardı..
datanın büyüklüğünden korkma, facebook da bir kısım işi bunun üzerinden götürüyor
https://www.facebook.com/about/graphsearch
@holyone, hocam her sistemin kendine ait farklı bir dili var mesela yazdığım sorgulardan örnek verirsem..
bunu neo4j için yazmıştım
match (actor:Actor{name:"Marsan, Eddie"}),(reeves:Actor{name:"Reeves, Keanu"}), p= shortestPath((actor)-[*..20]-(reeves)) return distinct extract(n in nodes(p)|n.name)[1..-1] as Names;
bu mongo nun
db.group0zips.findOne({'state': 'MA'}, {'city': 1}) { "city" : "AGAWAM", "_id" : "01001" }
bu pig in
input_lines = LOAD '/Data/NYTimes_articles' AS (line:chararray); -- Extract words from each line and put them into a pig bag -- datatype, then flatten the bag to get one word on each row -- (TOKENIZE returns a set of single-tuple containing just one word) words = FOREACH input_lines GENERATE FLATTEN(TOKENIZE(line,'.,:;?!-()[]{}" ')) AS word; -- words = FOREACH input_lines GENERATE FLATTEN(TOKENIZE(line)) AS word; -- filter out any words that are just white spaces -- filtered_words = FILTER words BY word MATCHES '\\w+'; -- -- create a group for each word word_groups = GROUP words BY word; -- count the entries in each group word_count = FOREACH word_groups GENERATE COUNT(words) AS count, group AS word; -- order the records by count ordered_word_count = ORDER word_count BY count DESC; STORE ordered_word_count INTO '/user/user9/3';
----
burdaki kolon yapısından bir şeyler çıkarabilirsin
burdaki slayta da göz atabilirsin
https://app.box.com/s/on9y17jdh9t3ma7o4neh