העברה מ-Apache Cassandra ל-Bigtable

במאמר הזה מוסבר איך לבצע מיגרציה של נתונים מ-Apache Cassandra ל-Bigtable עם שיבוש מינימלי. במאמר הזה מוסבר איך להשתמש בכלים בקוד פתוח, כמו Cassandra to Bigtable proxy adapter או Cassandra to Bigtable client for Java, כדי לבצע את ההעברה. לפני שמתחילים, כדאי לעיין במאמר בנושא Bigtable למשתמשי Cassandra.

בחירת גישה להעברה

אפשר להעביר נתונים מ-Apache Cassandra ל-Bigtable באחת מהדרכים הבאות:

  • מתאם פרוקסי של Cassandra ל-Bigtable מאפשר לכם לחבר אפליקציות מבוססות Cassandra ל-Bigtable בלי לשנות את מנהלי ההתקנים של Cassandra. הגישה הזו מתאימה במיוחד לאפליקציות שדורשות שינויים מינימליים בקוד.
  • Cassandra to Bigtable client for Java מאפשר לכם להשתלב ישירות עם Bigtable ולהחליף את מנהלי ההתקנים של Cassandra. הגישה הזו אידיאלית לאפליקציות שדורשות ביצועים גבוהים וגמישות.

מתאם לשרת proxy מ-Cassandra ל-Bigtable

מתאם ה-proxy של Cassandra ל-Bigtable מאפשר לכם לחבר אפליקציות מבוססות Cassandra ל-Bigtable. מתאם ה-Proxy פועל כממשק Cassandra שתואם ל-wire, ומאפשר לאפליקציה שלכם ליצור אינטראקציה עם Bigtable באמצעות CQL. השימוש במתאם ה-proxy לא מחייב שינוי של מנהלי ההתקנים של Cassandra, והתאמות ההגדרות הן מינימליות.

הוראות להגדרה של מתאם ה-proxy מופיעות במאמר מתאם proxy מ-Cassandra ל-Bigtable.

כדי לדעת באילו גרסאות של Cassandra מתאם ה-proxy נתמך, אפשר לעיין בקטע גרסאות נתמכות של Cassandra.

מגבלות

מתאם ה-proxy של Cassandra ל-Bigtable מספק תמיכה מוגבלת בסוגים מסוימים של נתונים, פונקציות, שאילתות וסעיפים.

מידע נוסף זמין במאמר בנושא Cassandra to Bigtable Proxy - Limitations (מגבלות של שרת proxy מ-Cassandra ל-Bigtable).

מרחב מפתחות של Cassandra

keyspace ב-Cassandra מאחסן את הטבלאות ומנהל את המשאבים באופן דומה למופע Bigtable. מתאם ה-proxy של Cassandra ל-Bigtable מטפל בשמות של מרחבי מפתחות באופן שקוף, כך שאפשר לבצע שאילתות באמצעות אותם מרחבי מפתחות. עם זאת, כדי להשיג קיבוץ לוגי של הטבלאות, צריך ליצור מופע חדש של Bigtable. צריך גם להגדיר בנפרד את השכפול של Bigtable.

תמיכה ב-DDL

מתאם ה-proxy של Cassandra ל-Bigtable תומך בפעולות של שפת הגדרת נתונים (DDL). פעולות DDL מאפשרות ליצור ולנהל טבלאות ישירות באמצעות פקודות CQL. אנחנו ממליצים להשתמש בגישה הזו להגדרת הסכימה, כי היא דומה ל-SQL אבל לא צריך להגדיר את הסכימה בקובצי תצורה ואז להריץ סקריפטים כדי ליצור טבלאות.

בדוגמאות הבאות אפשר לראות איך מתאם הפרוקסי של Cassandra ל-Bigtable תומך בפעולות DDL:

  • כדי ליצור טבלת Cassandra באמצעות CQL, מריצים את הפקודה CREATE TABLE:

    CREATE TABLE keyspace.table (
        id bigint,
        name text,
        age int,
        PRIMARY KEY ((id), name)
    );
    
  • כדי להוסיף עמודה חדשה לטבלה, מריצים את הפקודה ALTER TABLE:

    ALTER TABLE keyspace.table ADD email text;
    
  • כדי למחוק טבלה, מריצים את הפקודה DROP TABLE:

    DROP TABLE keyspace.table;
    

מידע נוסף זמין במאמר תמיכה ב-DDL ליצירת סכימה (השיטה המומלצת).

תמיכה ב-DML

מתאם ה-proxy של Cassandra ל-Bigtable תומך בפעולות של שפת טיפול בנתונים (DML) כמו INSERT,‏ DELETE,‏ UPDATE ו-SELECT.

כדי להריץ את שאילתות ה-DML הגולמיות, צריך להוסיף מרכאות בודדות לכל הערכים חוץ ממספרים, כמו בדוגמאות הבאות:

  • SELECT * FROM keyspace.table WHERE name='john doe';
    
  • INSERT INTO keyspace.table (id, name) VALUES (1, 'john doe');
    

השגת העברה ללא זמן השבתה

כדי להעביר נתונים עם השבתה מינימלית, אפשר להשתמש במתאם של Cassandra ל-Bigtable עם כלי ה-proxy של Zero Downtime Migration (ZDM) שהוא כלי קוד פתוח, ועם כלי העברת הנתונים של Cassandra.

בתרשים הבא מוצגים השלבים למיגרציה מ-Cassandra ל-Bigtable באמצעות מתאם ה-proxy:

תהליך ההעברה של Cassandra ל-Bigtable.
איור 1. תהליך ההעברה של Cassandra ל-Bigtable (אפשר ללחוץ כדי להגדיל).

כדי להעביר את Cassandra אל Bigtable, פועלים לפי השלבים הבאים:

  1. מחברים את אפליקציית Cassandra לכלי הפרוקסי של ZDM.
  2. הפעלת כתיבה כפולה ל-Cassandra ול-Bigtable.
  3. להעביר נתונים בכמות גדולה באמצעות הכלי Cassandra data migrator.
  4. מאמתים את ההעברה. אחרי האימות, אפשר לסיים את החיבור ל-Cassandra ולהתחבר ישירות ל-Bigtable.

כשמשתמשים במתאם ה-proxy עם כלי ה-proxy של ZDM, נתמכות היכולות הבאות להעברה:

  • כתיבה כפולה: שמירה על זמינות הנתונים במהלך ההעברה
  • קריאות אסינכרוניות: הגדלת קנה המידה ובדיקת העומס של מופע Bigtable
  • אימות ודיווח אוטומטיים של נתונים: שמירה על תקינות נתונים לאורך התהליך
  • מיפוי נתונים: מיפוי של שדות וסוגי נתונים כדי לעמוד בתקני הייצור

כדי להתאמן בהעברת נתונים מ-Cassandra ל-Bigtable, אפשר לעיין ב-codelab בנושא העברה מ-Cassandra ל-Bigtable באמצעות שרת proxy של כתיבה כפולה.

לקוח Cassandra ל-Bigtable ל-Java

אתם יכולים לבצע שילוב ישירות עם Bigtable ולהחליף את מנהלי ההתקנים של Cassandra. ספריית הלקוח Cassandra to Bigtable ל-Java מאפשרת לכם לשלב אפליקציות Java מבוססות-Cassandra עם Bigtable באמצעות CQL.

הוראות ליצירת הספרייה ולצירוף התלות בקוד האפליקציה מפורטות במאמר Cassandra to Bigtable Client for Java.

בדוגמה הבאה מוצג איך להגדיר את האפליקציה באמצעות הלקוח Cassandra to Bigtable ל-Java:

import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.cql.BoundStatement;
import com.datastax.oss.driver.api.core.cql.PreparedStatement;
import com.datastax.oss.driver.api.core.cql.ResultSet;
import com.datastax.oss.driver.api.core.cql.Row;
import com.google.bigtable.cassandra.BigtableCqlConfiguration;
import com.google.bigtable.cassandra.BigtableCqlSessionFactory;

/**
 * Example using Bigtable CQLSession
 */
public class ExampleWithBigtableCqlSession {

  public static void main(String[] args) {

    // Construct BigtableCqlConfiguration
    BigtableCqlConfiguration bigtableCqlConfiguration = BigtableCqlConfiguration.builder()
        .setProjectId("example-project-id")
        .setInstanceId("example-instance-id")
        .setDefaultColumnFamily("example-column-family")
        .setBigtableChannelPoolSize(4)
        .build();

    // Create CqlSession with BigtableCqlConfiguration
    BigtableCqlSessionFactory bigtableCqlSessionFactory = new BigtableCqlSessionFactory(bigtableCqlConfiguration);

    // Create CqlSession
    try (CqlSession session = bigtableCqlSessionFactory.newSession()) {

      // Create a table
      String createTableQuery = "CREATE TABLE <KEYSPACE>.<TABLE_NAME> (<COLUMN> <TYPE> PRIMARY KEY);";
      session.execute(createTableQuery);

      // Prepare an insert statement
      PreparedStatement preparedInsert = session.prepare(
          "INSERT INTO <KEYSPACE>.<TABLE_NAME> (<COLUMN>) VALUES (?)" // replace with your keyspace, table and columns
      );

      // Insert
      BoundStatement boundInsert = preparedInsert
          .bind()
          .setString("<COLUMN>", "<VALUE>");
      session.execute(boundInsert);

      // Query for all entries
      ResultSet resultSet = session.execute("SELECT <COLUMN> FROM <KEYSPACE>.<TABLE_NAME>;");
      // Print results
      for (Row row : resultSet) {
        System.out.println(row);
      }

    }

  }

}

הסבר על נתוני הביצועים

‫Bigtable מיועד לתפוקה גבוהה, לזמן אחזור נמוך ולמדרגיות עצומה. הוא יכול לטפל במיליוני בקשות בשנייה על פטה-בייט של נתונים. כשמבצעים מיגרציה מ-Cassandra באמצעות הלקוח Cassandra ל-Bigtable עבור Java או מתאם ה-proxy של Cassandra ל-Bigtable, חשוב להבין את ההשלכות הבאות על הביצועים:

תקורה של לקוח ו-Proxy

שתי הגישות להעברה יוצרות תקורת ביצועים מינימלית. הם פועלים כשכבת תרגום בין Cassandra Query Language ‏ (CQL) לבין Bigtable Data API, שעבר אופטימיזציה ליעילות.

ביצועים עם סוגי אוספים של Cassandra

אם מודל הנתונים של Cassandra משתמש בסוגי אוספים כמו מפות, קבוצות או רשימות כדי להטמיע סכימות דינמיות, Bigtable יכול לטפל בדפוסים האלה ביעילות. גם מתאם ה-proxy וגם הלקוח של Java ממפים את פעולות האוסף האלה למודל הנתונים הבסיסי של Bigtable, שמתאים במיוחד למערכי נתונים דלילים ורחבים.

פעולות ברמת הרכיב באוספים האלה יעילות מאוד. הפעולות האלה כוללות:

  • כדי לקרוא או לכתוב ערך יחיד במפה.
  • כדי להוסיף או להסיר רכיב מקבוצה.
  • כדי להוסיף רכיב לרשימה בתחילת הרשימה או בסופה.

‫Bigtable מבצע אופטימיזציה של סוגי הפעולות האלה על רכיבים נפרדים של אוסף, והביצועים שלהם זהים לביצועים של פעולות על עמודות סקלריות רגילות.

השוואת עומס העבודה

הביצועים של Bigtable יכולים להשתנות בהתאם לעומס העבודה, לעיצוב הסכימה, לדפוסי הגישה לנתונים ולהגדרת האשכול. כדי לקבל מדדי ביצועים מדויקים לתרחיש השימוש שלכם ולוודא ש-Bigtable עומד בדרישות הספציפיות שלכם, מומלץ להשוות בין עומסי העבודה של Cassandra לבין Bigtable באמצעות אחת משיטות ההעברה.

מידע נוסף על שיטות מומלצות לשיפור הביצועים של Bigtable זמין במאמר בנושא הסבר על הביצועים.

כלים נוספים בקוד פתוח של Cassandra

התאימות של מתאם ה-proxy של Cassandra ל-Bigtable ל-CQL מאפשרת לכם להשתמש בכלים נוספים בסביבה העסקית של Cassandra בקוד פתוח. הכלים האלה כוללים:

  • Cqlsh: המעטפת של CQL מאפשרת להתחבר ישירות ל-Bigtable דרך מתאם ה-proxy. אפשר להשתמש בה כדי לבצע ניפוי באגים וחיפושי נתונים מהירים באמצעות CQL.
  • Cassandra Data Migrator (CDM): הכלי הזה מבוסס על Spark ומתאים להעברת נפחים גדולים (עד מיליארדי שורות) של נתונים היסטוריים. הכלי מספק יכולות אימות, דיווח על הבדלים והפעלה מחדש, והוא תואם באופן מלא למתאם הפרוקסי.

המאמרים הבאים