Apache Cassandra は、大規模、高スループット、フォールトトレラントな分散データ ストレージ シナリオで広く使用されている非リレーショナル データベース (NoSQL) です。 Google の Bigtable に似たデータ モデルを使用し、それを Amazon Dynamo の分散アーキテクチャと組み合わせます。この記事では、Go 言語で Apache Cassandra を使用する方法と、それを使用して簡単な Web アプリケーションを構築する方法について説明します。
Cassandra のデータ モデル
Cassandra のデータ モデルは、完全に分散されたハッシュ テーブルとして論理的に見ることができます。テーブルは複数の列ファミリーで構成されます。各列ファミリーにはキースペース (キースペース) が含まれており、そのキースペースには複数のテーブル (テーブル) が含まれます。各テーブルには多くの行 (行) が含まれており、各行には列 (列) という名前の複数のデータを格納できます。 。
Cassandra では、CQL (Cassandra Query Language) を使用してデータのクエリと操作を行うことができます。 CQL は SQL 言語に似た構文を使用するため、学習と使用が簡単ですが、構文の詳細の一部がまだ異なります。
Apache Cassandra を使用する手順
それでは、Go アプリケーションで Apache Cassandra を使用する方法を見てみましょう。主に以下の 5 つの手順があります。
1. Cassandra のインストール
最初に行うことは、Cassandra をインストールすることです。 Cassandra の公式 Web サイトにアクセスして、対応するバイナリ ファイルをダウンロードし、指示に従ってインストールします。
2. 列ファミリーの作成
Cassandra をインストールした後の次のステップは、列ファミリーを作成し、列ファミリーにいくつかの列を追加することです。 Cassandra を操作するには、cqlsh (Cassandra シェル) を使用できます。
ここでは、学生名、学生番号、クラス、その他の情報を含む「student」という名前の列ファミリーを作成しました:
CREATE KEYSPACE learning WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'} AND durable_writes = true; CREATE TABLE learning.students ( student_id text PRIMARY KEY, first_name text, last_name text, department text );
3. Cassandra に接続します
In Go 言語では、サードパーティのライブラリを使用して Cassandra に接続できます。ここでは gocql を使用して接続します。
以下は、Cassandra クラスターに接続するコード例です:
cluster := gocql.NewCluster("127.0.0.1") cluster.Keyspace = "learning" session, err := cluster.CreateSession() if err != nil { log.Fatal(err) } defer session.Close()
ここでは、Cassandra クラスターの IP アドレスまたはホスト名を指定し、接続先のキースペースを指定するだけです。
4. クエリ ステートメントの作成
Go 言語では、gocql.Query を使用してクエリ ステートメントを作成できます。以下は、テーブル内のすべての学生情報をクエリするコード例です。
var students []model.Student query := "SELECT * FROM students" iter := session.Query(query).Iter() for iter.Scan(&student.ID, &student.FirstName, &student.LastName, &student.Department) { students = append(students, student) } if err := iter.Close(); err != nil { log.Fatal(err) } for _, student := range students { fmt.Println(student.ID, student.FirstName, student.LastName, student.Department) }
ここでは、まず、テーブルから取得した学生データを格納するための model.Student 構造体を宣言します。次に、SELECT クエリ ステートメントを記述し、session.Query メソッドを使用してクエリ オブジェクトを作成しました。次に、クエリの結果を繰り返し処理してデータをスライスに保存し、最後にすべての生徒の情報を出力します。
5. 接続を閉じる
最後に、Cassandra への接続を閉じる必要があります。以下は、Cassandra 接続を閉じるためのコード例です。
defer session.Close()
Cassandra を使用した Web アプリケーションの構築
次に、Go 言語で Apache Cassandra を使用して単純な Web を構築する方法を見てみましょう。応用。この Web アプリケーションでは、学生リスト ページを作成し、すべての学生の情報を表示し、学生情報を追加するフォームを提供します。
ここでは、Gin フレームワークを使用して Web アプリケーションを構築します。以下は、Web アプリケーションを構築するためのコード例です。
package main import ( "html/template" "log" "net/http" "strconv" "github.com/gin-gonic/gin" "github.com/gocql/gocql" ) type Student struct { ID string FirstName string LastName string Department string } var session *gocql.Session func init() { cluster := gocql.NewCluster("127.0.0.1") cluster.Keyspace = "learning" var err error session, err = cluster.CreateSession() if err != nil { log.Fatal(err) } } func main() { router := gin.Default() router.LoadHTMLGlob("templates/*") router.GET("/", func(c *gin.Context) { var students []Student query := "SELECT * FROM students" iter := session.Query(query).Iter() for { var student Student if !iter.Scan(&student.ID, &student.FirstName, &student.LastName, &student.Department) { break } students = append(students, student) } if err := iter.Close(); err != nil { log.Fatal(err) } c.HTML(http.StatusOK, "index.tmpl", gin.H{ "students": students, }) }) router.POST("/add", func(c *gin.Context) { student := Student{ ID: c.PostForm("id"), FirstName: c.PostForm("first_name"), LastName: c.PostForm("last_name"), Department: c.PostForm("department"), } query := "INSERT INTO students (student_id, first_name, last_name, department) VALUES (?, ?, ?, ?)" err := session.Query(query, student.ID, student.FirstName, student.LastName, student.Department).Exec() if err != nil { log.Fatal(err) } c.Redirect(http.StatusFound, "/") }) router.Run(":8080") }
ここでは、最初に Student という名前の構造体を宣言します。これは、学生の情報を表すために使用されます。次に、init 関数で Cassandra クラスターに接続します。
main 関数では、Gin ルーティングを使用してさまざまな HTTP リクエストを処理します。 「/」パスでは、最初にすべての学生の情報をクエリし、学生リスト ページをレンダリングするためにそれらの情報をindex.tmpl テンプレートに渡します。 「/add」パスに、ユーザーが送信したフォーム データに基づいて新しい学生レコードを挿入し、ユーザーを学生リスト ページにリダイレクトします。
最後に、router.Run() を呼び出して Web アプリケーションを開始します。
概要
この記事では、Go 言語で Apache Cassandra を使用する方法と、簡単な Web アプリケーションを構築する方法について説明しました。この例を通して、Cassandra の簡単な使用法と、サードパーティのライブラリを使用して Go 言語で Cassandra を操作する方法を確認できます。高スループットで高可用性の分散データベースを探している場合は、Apache Cassandra が選択肢になるかもしれません。
以上がGo での Apache Cassandra の使用: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。