noSQL baza
5 naročnikov
5 naročnikov
Pozdravljeni.
Katere noSQL baze se najpogosteje uporabljajo in katere priporočate za PHP?
Hvala za odgovore in pomoč!
5 odgovorov
Mongodb je precej popularna
Vendar ali si prepričan da rabiš nosql ? Jaz sem imel pred letom problem z veliko količino podatkov, preverili so mislim da ene par nosql rešitev in nobena ni bila ustrezna, potem ko se je delal benchmark s sample data.
Nosql kao magična rešitev za vse probleme z big data se je izkazal za ne tako zelo magično.
Na koncu sem namesto nosql uporabil navadno mysql rešitev z throughput processingom, kar v bistvu pomeni da vsako uro cron obdela podatke in izlušči samo dele, ki so pomembni ter jih zapiše v nove tabele. Potem isto dela še na dnevnem in tedenskem, mesečnem nivoju.
Postam še malo interne diskusije o nosql, žal v angleščini, mogoče ti odgovori na katera vprašanja.
--
Ok so - statistics fast and relational databases are stuff don't go well together, so if we want effective statistic browsing and storing, we need to get rid of relational databases (read: get rid of *SQL servers).
Relational databases by design are not good for these kind of things, and therefore should not be used because there are alternatives that are 10 times more suited for this.
Alternative is using mongo db. See following URLs:
http://en.wikipedia.org/wiki/NoSQL
http://en.wikipedia.org/wiki/MongoDB
http://www.mongodb.org/display/DOCS/Tutorial
http://www.mongodb.org/display/DOCS/MapReduce
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
Which of course, would require rewriting part of the app to use it, instead of sql backend. Redesign of database also, since mongo db and generally non rdbms dbs are working quite differently.
I personally didn't use mongo db ever, I used pytables which is a python thing similar to this, 3 dimensional databases which are suited for things like statistics or whatever else which have huge amounts of data.
For example, in pytables i can do a complex query on tables with millions of rows and get data in less then a second, i'm thinking mongo db does similar thing, and if we want fast stats we need to get rid of the "standard" way.
Some nosql blog http://nosql.mypopescu.com/ ..
proposed to use mongoDB for this (he will install and configure when we need it), but as mongo represents noSQL and nonrelational database system, current stats will not work also so a whole application should be changed
Current mysql is 38.8GB one table and 8GB second table
but we discovered that nosql solution is no good
cause we would need to redefine complete data model
which is not wise
so we said that we will just optimize sql for you
Eden od razlogov za opustitev nosql je bil tudi, da je bila obstoječa aplikacija v sql in da je imela veliko podatkov. Če bi bil development denovo, bi bil mogoče outcome drugačen.
S tem problemom so se par tednov ukvarjali zelo izkušeni programerji in server admini in se potem odločili da nosql no go.
Verjetno bo overkill, ker nimaš takih potreb, ampak preveri si: http://impala.io/. To je odgovor na vse RDBMS baze, ki single core procesirajo querye... NoSQL baz je precej. Samo par večjih: Hbase, Cassandra, CouchDB, TokuMX (alternativa MongoDB-ju in uporablja fraktalna drevesa... super hitra), ElasticSearch... Katero boš uporabil je samo vprašanje namembnosti. Kaj bi rad storal in kako bi rad scale-al zadeve.
Pri nas se noSQL baza super obnese, kljub velikemu številu podatkov (prej smo imeli MySQL in tudi ni bilo problemov, sedaj je kvečjemu bolje :) ) V začetku smo imeli shranjene samo seje v noSQLu. Imamo pa vmes SOLR (šaltamo na elasticsearch) in se precej zmanjša obremenitev baze. Imaš replikacijo in sharding, ki ju on the fly usposobiš.
Moraš pa spremeniti razmišljanje, ko začneš enkrat delati z noSQL bazami. Normalizacija odpade. Tudi v kolikor sem govoril z našim DB mojstrom je rekel, da pri velikih web aplikacijah SQL bazo načrtuješ čisto drugače in moraš pozabiti na standarne "šolske primere".
Elasticsearcha ni noSQL baza, je samo search engine. Ni namenjen trajnemu shranjevanju podatkov ampak jih samo indexira iz določenega vira (lahko nastaviš sql ali couchbase river ali pa s skripto vpisuješ podatke notri). Ko sem še sam razmišljal o trajnem shranjevanju podatkov v ES sem za odgovor dobil: "Če maš jajca".
Je pa zadeva superhitra in precej razbremeniš strežnik na katerem imaš bazo. Velik plus sta enostavna replikacija in sharding.
v SQLu je bilo cca 60-70 GB podatkov, ne vem koliko imamo zdej.
aja, couchDB != couchbase
Tudi mi nucamo nosql bazo Cassandra. Shranjujemo pa senzorske podatke, približno 5mil podatkov na dan. Vse kar lahko povem je da stvar preprosto deluje.
Uporabiti nosql ali ne je odvisno od problema. Večina stvari se da rešiti z "navadnimi" bazami, tako da je v večini primerov nosql baza overkill oz. premature optimization.