Cassandra

8541 ワード

  • Introduction of Cassandra
  • これはGoogleのBigTable ColumnベースのデータモデルとFacebook上で作成されたDynamo分散モデルに基づいた分散データベースで、2008年にFacebookからApacheオープンソースコードとして公開されました.これは、既存のリレーショナル・データベースとは異なり、SQLを使用せず、大容量のデータ・オブジェクトを高性能に処理できるNoSQLの製品です.(High-Scale). ノードを追加することで、パフォーマンスを低下させることなく容量を横方向に拡張できます.
    Javaで記述されていますが、データベースの名前と一致するように多くのプログラミング言語をサポートしています.Ruby,Perl,Python,Scala,Java,PHP,C#
    ソーシャル・ネットワーク・サービスは、通常、データ間の複雑な関係を定義することなく、高容量と高性能を必要とするオブジェクトに使用されます.パフォーマンス、拡張性、信頼性のいずれも優れていますが、残念ながら、データ・センターを複数の国/地域にわたって独立して導入し、データ・センター間でデータを同期させる要件はサポートされていません.グローバルな範囲が必要な場合、MySQLベースの地理的レプリケーションとShardingは、現在最も広く使用されているアーキテクチャである可能性があります.
  • Data Model
  • カサンドラのデータモデルは次のとおりです.
    従来のリレーショナル・データベースとは異なる構造を持つ.まず,データモデルの概念を理解する.
    1) Column
    カラムは、カラム名と値からなるデータ構造体です.
    {name: “emailAddress”, value:” [email protected] ”}
    {name:”age” , value:”20”}
    2) Column Family
    コラムはコラムの集合です.リレーショナル・データベースのテーブルは考慮できますが、概念は少し異なります.違いは後述しますが、コラムチームにはROWを識別する鍵があります.1つの鍵に複数の柱がある形が柱族です.
    例えば、Row
    Cassandra = { emailAddress:”[[email protected]](mailto:[email protected])” , age:”20”}
    どうけいCassandraはこの行のKeyとなり、emailAddressとageという2つの列があり、各列の値はそれぞれ「[email protected]」と「20」である.
    複数のRowを使用して、UserProfileというカラムファミリを表示します.
    UserProfile={
    	Cassandra={ emailAddress:”[[email protected]](mailto:[email protected])” , age:”20”}
    	TerryCho= { emailAddress:”[[email protected]](mailto:[email protected])” , gender:”male”}
    	Cath= { emailAddress:”[[email protected]](mailto:[email protected])” , age:”20”,gender:”female”,address:”Seoul”}
    }
    形容できるここで注目すべき点は,Rowごとにデータパターンが異なることである.Cassandra RowはEmailAddressとageの2色、Terryがあります.ChoはEmailAddressと性別の2つのコラムを持っている.このように、カサンドラは道路ごとに異なる形式のデータアーキテクチャを持つことができ、この特徴を「無制約」と呼ぶ.(同じカラムファミリーでも、キーにバインドされたデータ構造は、キーごとに異なる場合があります.)
    3) KeySpace
    KeySpaceは論理的にColumnFamilyの集合である.データ構造または関係にのみ影響します.
    4) Super Column & Supper Column Family
    前述したカラムでは、カラムの値は、StringやIntegerなどのプライバシーであってもよいし、カラム自体であってもよい.例えば、この構造.
    {
    	name:”username”
    	value: firstname{name:”firstname”,value=”Terry”}
    	value: lastname{name:”lastname”,value=”Cho”}
    }
    usernameという名前の列にはfirstnameとlastnameという2つの列が含まれています.
    同様に、ColumnシリーズにもColumnシリーズのSuper構造を含めることができる.
    UserList={
    	Cath:{
    		username:{firstname:”Cath”,lastname:”Yoon”}
    		address:{city:”Seoul”,postcode:”1234”}
    	}
    	Terry:{
    		username:{firstname:”Terry”,lastname:”Cho”}
    		account:{bank:”hana”,accounted:”1234”}
    	}
    }
    UserListという名前のColumnシリーズでは、各Cath Keyにusernameとaddressという名前のColumnシリーズ、TerryとAccountのColumnシリーズがあります.
    5) Data Model for Java Developer
    Kasandraのデータ構造を簡単に紹介しましたが、Java開発者であればHashTableを思い出します.データモデルをHashTableと比較した結果、次のようになります.コードで言えば、次のような形になります.
    Javaコードを使用して、前述のColumn Familyのデータ構造を表します.
    UserProfile={
    	Cassandra={ emailAddress:”[[email protected]](mailto:[email protected])” , age:”20”}
    	TerryCho= { emailAddress:”[[email protected]](mailto:[email protected])” , gender:”male”}
    	Cath= { emailAddress:”[[email protected]](mailto:[email protected])” , age:”20”,gender:”female”,address:”Seoul”}
    }
    JAvaコード
    class Keyspace{
    
    	HashTable keyspaces = new HashTable();
    	createColumnFamily(String name){
    		keyspaces.put(name,new HashTable);
    	}
    
    	putValue(String columnFamily,String key,Object value){
    		Hashtable cf = keyspaces.get(columnFamily);
    		cf.put(key,value);
    	}
    
    }
    
    class TerryVO{ // Terry is a Key
    	String emailAddress; // each column
    	String gender;
    	// setter & getter
    }
    
    class CathVO{ // Cath is a Key
    	String emailAddress;
    	String age;
    	String gender;
    	// setter & getter
    }
    
    KeySpace myspace;
    myspace.createColumnFamily("UserProfile");
    myspace.putValue("UserProfile","TerryCho",new TerryVO("[[email protected]](mailto:[email protected])","male");
    myspace.putValue("UserProfile","Cath",new CathVO("[[email protected]](mailto:[email protected])","20","female");
    Java開発者であれば、簡単に理解できるかもしれません.また、その構造を分析すると、Oracleのデータ・グリッド・ソリューションはCoherenceのデータ構造と非常に似ています.