LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Cassandra DB - IV.

Cassandra ke komunikaci s klientem místo textového dotazovacího jazyka preferuje vzdálené voláním procedur. Zjednodušeně řečeno, místo zdrojového kódu typu spojení_s_databází.pošli_dotaz("jméno_operace " + argument.to_string()); se používá kód typu klient.jméno_operace(argument);. Jako infrastruktura pro volání byl zvolen projekt Apache Thrift, který bude v článku v krátkosti popsán. Závěr dílu se věnuje vysokoúrovňovým rozhraním pro jednotlivé jazyky a dalšímu užitečnému softwaru.

16.8.2011 00:00 | František Bártík | Články autora | přečteno 4727×

Apache Thrift

Databáze Cassandra definuje svoje aplikační programátorské rozhraní (API), které se může lišit v závislosti na verzi Cassandry a případných rozšířeních doprogramovaných uživatelem. Nad vlastní databázovou logikou běží server Apache Thrift, který je licencován pod Apache License ve verzi 2. Vzdáleným voláním procedur (remote procedure call, RPC) přes rozhraní Thrift lze přistupovat k API Cassandry. Součástí distribuce Cassandry je soubor /interface/cassandra.thrift, který ve svém vlastními speciálním jazyku popisuje rozhraní příslušné verze Cassandry.

Programování klientské části aplikace vyžaduje definici rozhraní Cassandry ve zvoleném programovacím jazyce, takže rozhraní definované ve speciálním jazyku projektu Thrift se nedá přímo do zdrojového kódu importovat. Aplikace Thrift však umí transformovat definici rozhraní ve svém formátu do definic v podporovaných programovacích jazycí. Přepis se provede příkazem thrift -identifikátor_jazyka soubor_s_rozhraním.thrift (konkrétně např. thrift -php cassandra.thrift). Mezi podporované jazyky patří C++, Java, Python, PHP, Ruby a několik dalších jazyků.

Jazyk Thriftu určuje rozhraní pomocí definic :

  • jmenných prostorů namespace,
  • základních datových typů bool, byte, i16, i32, i64, double a string,
  • speciálního typu binary pro posloupnost surových nekódovaných bytů,
  • kontejnerových typů list, map a set,
  • složených typů struct a enum,
  • jednotlivých služeb (prototypy jednotlivých funkcí),
  • možných výjimek/chyb exception u jednotlivých služeb.
Při transformaci se zachovávají názvy jednotlivých definic v API, takže se jednotlivé části API jmenují ve všech jazycích stejně. Rozhraní Cassandry staví na rozumných jmenných konvencích, takže např. nehrozí kolize s klíčovými slovy některého z jazyků. Při transformaci se použije nejbližší analogický prostředek; například místo map z Thriftu se v Javě použije typ java.util.HashMap.

Ukázka částí cassandra.thrift

Ke zmíněným definicím mohou být přiloženy i komentáře. Soubor cassandra.thrift je velmi dobře komentován, takže tvoří velmi dobrou podrobnou dokumentaci API vámi používané verze Cassandry. Pro ilustraci uveďme tři citace z cassandra.thrift pro verzi 0.8.1.

První ukázka části cassandra.thrift

#
# Interface definition for Cassandra Service
#

namespace java org.apache.cassandra.thrift
namespace cpp org.apache.cassandra
namespace csharp Apache.Cassandra
namespace py cassandra
namespace php cassandra
namespace perl Cassandra

# Thrift.rb has a bug where top-level modules that include modules
# with the same name are not properly referenced, so we can't do
# Cassandra::Cassandra::Client.
namespace rb CassandraThrift

Druhá ukázka části cassandra.thrift

/* describes a column family. */
struct CfDef {
 1: required string keyspace,
 2: required string name,
 3: optional string column_type="Standard",
 5: optional string comparator_type="BytesType",
 6: optional string subcomparator_type,
 8: optional string comment,
 9: optional double row_cache_size=0,
 11: optional double key_cache_size=200000,
 12: optional double read_repair_chance=1.0,
 13: optional list<ColumnDef> column_metadata,
 14: optional i32 gc_grace_seconds,
 15: optional string default_validation_class,
 16: optional i32 id,
 17: optional i32 min_compaction_threshold,
 18: optional i32 max_compaction_threshold,
 19: optional i32 row_cache_save_period_in_seconds,
 20: optional i32 key_cache_save_period_in_seconds,
 21: optional i32 memtable_flush_after_mins,
 22: optional i32 memtable_throughput_in_mb,
 23: optional double memtable_operations_in_millions,
 24: optional bool replicate_on_write,
 25: optional double merge_shards_chance,
 26: optional string key_validation_class,
 27: optional string
row_cache_provider="org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider",
 28: optional binary key_alias,
}

Třetí ukázka části cassandra.thrift

/* describes a keyspace. */
struct KsDef {
 1: required string name,
 2: required string strategy_class,
 3: optional map<string,string> strategy_options,

 /** @deprecated */
 4: optional i32 replication_factor,

 5: required list<CfDef> cf_defs,
 6: optional bool durable_writes=1,
}
 /**
 Remove data from the row specified by key at the granularity specified by column_path, and the given timestamp. Note
 that all the values in column_path besides column_path.column_family are truly optional: you can remove the entire
 row by just specifying the ColumnFamily, or you can remove a SuperColumn or a single Column by specifying those levels too. */
void remove(1:required binary key,
 2:required ColumnPath column_path,
 3:required i64 timestamp,
 4:ConsistencyLevel consistency_level=ConsistencyLevel.ONE)
 throws (1:InvalidRequestException ire, 2:UnavailableException ue,
3:TimedOutException te),

Jak probíhá předávání dotazu?

Vypišme všechny fáze od vygenerování a odeslání dotazu na straně klienta.

  • Uživatelský kód rozhodne o zavolání databáze, připraví a nastaví požadované parametry a zavolá dotaz.
  • Vygenerovaný kód přepíše volání do formy, které Thrift rozumí.
  • V dalším kroku se požadavek serializuje na vrstvě Tprotocol. Možné implementace TBinaryProtocol, TCompactProtocol, TDebugProtocol, TDenseProtocol, TJSONProtocol a TSimpleJSONProtocol se liší svými vlastnostmi a pochopitelně i svým výkonem.
  • V dalším kroku vrstva TTransport připraví dotaz k přenosu. Na výběr jsou implementace TFileTransport, TFramedTransport, TSocket a TZlibTransport.
  • Dotaz se přenese k Thrift serveru přes síťové rozhraní.
Odpověď je zpracována stejným způsobem pouze v opačném pořadí.

Ukázka použití

Část dílu věnovanou Thriftu uzavírá ukázkový javovský kód. Vynechány jsou nutné importy org.apache.cassandra.thrift.Cassandra, org.apache.cassandra.thrift.ConsistencyLevel, org.apache.cassandra.thrift.Clock, org.apache.cassandra.thrift.ColumnParent, org.apache.thrift.protocol.TBinaryProtocol..., import definic výjimek a odchytávání výjimek.

//vytvoření spojení s databází
TFramedTransport my_tf = new TFramedTransport(new TSocket("localhost", "9190"));
Cassandra.Client my_client = new Cassandra.Client(new TBinaryProtocol(my_tf));
my_tf.open();

//zvolení používaného keyspace a odkazu na používanou cf
client.set_keyspace("jméno keyspace");
ColumnParent my_cp = new ColumnParent("jméno cf");

//vložení záznamu
Clock casove_razitko = new Clock(System.currentTimeMillis());
client.insert("jméno řádku".getBytes(),
 my_cp,
 new Column("jméno sloupce".getBytes(UTF8), "hodnota".getBytes(), casove_razitko),
 ConsistencyLevel.ONE);
client.insert("jméno řádku".getBytes(),
 my_cp,
 new Column("jméno jiného sloupce".getBytes(UTF8), "jiná hodnota".getBytes(), casove_razitko),
 ConsistencyLevel.ONE);

Další nástroje podporované Cassandrou

Serializační RPC software Apache Avro se podobá Thriftu. V některých ohledech Avro Thrift překonává a možná v budoucích verzích Cassandry se stane preferovaným RPC řešením. Podporované jazyky jsou Java, C, C++, Python a Ruby.

Cassandra query language (CQL) představuje nový prostředek komunikace s databází. Tato novinka je dostupná pouze v poslední řadě Cassandry 0.8. Principy práce CQL se shodují s SQL a i syntaxe CQL se silně inspiruje syntaxí SQL. Na oficiálních stránkách Cassandry naleznete ovladače pro Java (JDBC), Python (DBAPI2) a Python (Twisted).

Standardní administrátorská konzole cassandra-cli a nástroj nodetools byly zmíněny již v předchozích dílech.

Různý další software

Cassandra-webconsole je J2EE (JRE 6.0+) aplikace pro servletový kontejner Tomcat. Webové rozhraní cassandra-webconsole usnadňuje a zpřehledňuje administraci databáze Cassandra.

Pyssandra je vysokoúrovňový klient Cassandry pro jazyk Python.

Hector je velmi populární všestranný javovský client pro Cassandru. Hector mimo jiné nabízí vysokoúrovňové rozhraní, podporu Java Management Extensions (JMX), connection pooling, jednoduché ORM... Všimněme si, že jméno Hector je jedním z mnoha označení ze starořeckých dějin spojovaných s databází Cassandra.

Chiton je další API rozhraní pro Python.

Pelops je další API rozhraní pro Javu.

Knihovna phpcassa zpřístupňuje databázi Cassandra z php skriptů.

Telephus je další rozhraní pro Python, které staví na frameworku Twisted.

Kundera je jednoduchý ORM framework pro Javu, který jako úložiště využívá Cassandru.

Twissandra je ukázkový kód, který demonstruje nasazení databáze Cassandra. Twissandra předvádí, jak naprogramovat webovou službu podobající se sociální síti Twitter. Twissandra byla portována do více programovacích jazyků a frameworků.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

8.1.2017 17:51 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 19. ledna od 18:30 v pražském hackerspacu Brmlab. Tentokrát je tématem srazu ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. K vidění bude mechanická klávesnice dasKeyboard, trackball Logitech nebo grafický tablet (a velký touchpad) Wacom. Přineste i vy ukázat svoje zajímavé klávesnice a další HW. V 18:20 je sraz před budovou, v 18:30 jdeme společně dovnitř, je tedy dobré přijít včas. Podle zájmu se později přesuneme do nějaké restaurace v okolí.
Přidat komentář

1.12.2016 22:13 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.
Komentářů: 1

4.9.2016 20:13 /Pavel `Goldenfish' Kysilka
PR: Dne 22.9.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, provozování ERP v cloudu, o hostování různých typů softwaru, ale třeba i o zálohování dat nabízeném podnikům formou služby.
Přidat komentář

1.9.2016 11:27 /Honza Javorek
Česká konference o Pythonu, PyCon CZ, stále hledá přednášející skrz dobrovolné přihlášky. Máte-li zajímavé téma, neváhejte a zkuste jej přihlásit, uzávěrka je již 12. září. Konference letos přijímá i přednášky v češtině a nabízí pomoc s přípravou začínajícím speakerům. Řečníci mají navíc vstup zadarmo! Více na webu.
Přidat komentář

27.8.2016 8:55 /Delujek
Dnes po 4 letech komunitního vývoje vyšla diaspora 0.6.0.0
diaspora* je open-source, distribuovaná sociální síť s důrazem na soukromý
Více v oficiálním blog-postu
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

24.3.2017 11:54 / Hui
country cottages

16.3.2017 16:33 / BezvaDesign.cz
Re: Hledám grafika do teamu

9.3.2017 11:44 / Jaromir Obr
Re: chyba

18.1.2017 20:18 / martin horky
Spolupraca linuxu a microsoftu

17.1.2017 9:57 / Pavel Hrubeš
Re: Externí USB televizní karta

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze