Halaman ini menunjukkan cara memigrasikan skema MySQL ke skema Spanner. Sebaiknya gunakan alat migrasi Spanner untuk membuat skema Spanner dari skema MySQL yang ada. Alat ini memetakan sebagian besar jenis data MySQL ke jenis Spanner, serta menandai pilihan dan memberikan saran untuk menghindari potensi masalah migrasi.
Perbandingan jenis data
Petakan daftar jenis data MySQL berikut ke padanan Spanner:
Jenis data MySQL | Padanan Spanner | Catatan |
---|---|---|
INTEGER ,
INT ,
BIGINT ,
MEDIUMINT ,
SMALLINT ,
TINYINT
|
INT64 |
|
TINYINT ,
BOOL ,
BOOLEAN ,
|
BOOLEAN |
Nilai TINYINT(1) digunakan untuk merepresentasikan nilai boolean
'true' (bukan nol) atau 'false' (0). |
BIT
|
BOOLEAN , INT64 |
|
CHAR ,
VARCHAR ,
TINYTEXT ,
TEXT ,
MEDIUMTEXT ,
LONGTEXT
|
STRING |
Spanner menggunakan string UTF8 Unicode di seluruhnya dan tidak memiliki kolasi yang dapat dikonfigurasi.VARCHAR mendukung panjang maksimum 65.535 byte, sedangkan
Spanner mendukung hingga 2.621.440 karakter.
|
FLOAT |
FLOAT32 |
|
DOUBLE |
FLOAT64 |
|
DECIMAL , NUMERIC |
NUMERIC
|
Di MySQL, jenis data NUMERIC dan DECIMAL mendukung
hingga total 65 digit presisi dan skala, seperti yang ditentukan dalam
deklarasi kolom. Jenis data NUMERIC Spanner
mendukung presisi hingga 38 digit dan skala 9 digit desimal.Jika Anda memerlukan presisi yang lebih tinggi, lihat Menyimpan data numerik presisi arbitrer untuk mekanisme alternatif. |
BINARY ,
VARBINARY ,
TINYBLOB ,
BLOB ,
MEDIUMBLOB ,
LONGBLOB
|
BYTES |
Objek kecil (kurang dari 10 MiB) dapat disimpan sebagai
BYTES . Pertimbangkan untuk menggunakan penawaran Google Cloud alternatif seperti Cloud Storage untuk menyimpan objek yang lebih besar.
|
DATE |
DATE |
Spanner dan MySQL menggunakan format 'yyyy-mm-dd '
untuk tanggal, sehingga tidak diperlukan transformasi. Fungsi SQL disediakan
untuk mengonversi tanggal ke string berformat.
|
DATETIME , TIMESTAMP |
TIMESTAMP |
Spanner menyimpan waktu secara independen dari zona waktu. Jika Anda perlu menyimpan zona waktu, Anda harus menggunakan kolom STRING terpisah.
Fungsi SQL disediakan untuk mengonversi stempel waktu menjadi string yang diformat menggunakan zona waktu. |
TEXT , TINYTEXT , ENUM |
STRING |
Nilai TEXT kecil (kurang dari 10 MiB) dapat disimpan sebagai
STRING . Pertimbangkan untuk menggunakan penawaran Google Cloud alternatif
seperti Cloud Storage untuk mendukung nilai TEXT
yang lebih besar.
|
ENUM |
STRING |
Validasi nilai ENUM harus dilakukan di aplikasi. |
SET |
ARRAY<STRING> |
Validasi nilai elemen SET harus dilakukan di aplikasi. |
LONGBLOB , MEDIUMBLOB |
BYTES atau STRING yang berisi URI ke objek.
|
Objek kecil (kurang dari 10 MiB) dapat disimpan sebagai BYTES .
Pertimbangkan untuk menggunakan penawaran Google Cloud alternatif seperti
Cloud Storage untuk menyimpan objek yang lebih besar.
|
LONGTEXT , MEDIUMTEXT |
STRING (berisi data atau URI ke objek eksternal)
|
Objek kecil (kurang dari 2.621.440 karakter) dapat disimpan sebagai
STRING . Pertimbangkan untuk menggunakan penawaran Google Cloud alternatif
seperti Cloud Storage untuk menyimpan objek yang lebih besar.
|
JSON |
JSON
|
String JSON kecil (kurang dari 2.621.440 karakter) dapat disimpan sebagai
JSON . Pertimbangkan untuk menggunakan penawaran Google Cloud alternatif
seperti Cloud Storage untuk menyimpan objek yang lebih besar.
|
GEOMETRY ,
POINT ,
LINESTRING ,
POLYGON ,
MULTIPOINT ,
MULTIPOLYGON ,
GEOMETRYCOLLECTION
|
STRING ,
ARRAY
|
Spanner tidak mendukung jenis data geospasial. Anda harus menyimpan data ini menggunakan jenis data standar, dan menerapkan logika penelusuran atau pemfilteran di aplikasi. |
Dalam banyak kasus, beberapa jenis MySQL dipetakan ke satu jenis Spanner. Hal ini karena MySQL memiliki serangkaian jenis untuk konsep yang sama yang memiliki batas panjang yang berbeda, dan di Spanner ada satu jenis keseluruhan yang memiliki satu batas yang relatif besar.
Perhatikan contoh berikut:
MySQL memiliki
TEXT
,TINYTEXT
,MEDIUMTEXT
,LONGTEXT
. Di Spanner, ada satu jenisSTRING
dengan parameter panjang karakter yang dapat ditetapkan ke nilai apa pun hingga 2.621.440 karakter.MySQL memiliki
INTEGER
,INT
,BIGINT
,MEDIUMINT
,SMALLINT
, danTINYINT
. Spanner memiliki satu jenisINT64
yang menyimpan nilai bilangan bulat bertanda 8 byte. Perbedaan utamanya adalahINT64
Spanner menggunakan lebih banyak penyimpanan daripadaMEDIUMINT
,SMALLINT
, danTINYINT
. Selain itu,INT64
tidak mencakup batasan rentangMEDIUMINT
,SMALLINT
, danTINYINT
, meskipun batasan ini dapat diterapkan dengan menambahkan batasanCHECK
.
Spanner tidak mendukung jenis geospasial. Anda dapat menyimpan nilai dari jenis ini dengan mengenkodnya sebagai string, byte, atau array. Semua pemfilteran, operasi, dan fungsi harus dilakukan di tingkat aplikasi.
Kueri
Spanner menggunakan dialek SQL ANSI 2011 dengan ekstensi, serta memiliki banyak fungsi dan operator untuk membantu menerjemahkan dan menggabungkan data Anda. Setiap kueri SQL yang menggunakan dialek, fungsi, dan jenis khusus MySQL harus dikonversi agar kompatibel dengan Spanner.
Meskipun Spanner tidak mendukung data terstruktur sebagai definisi kolom, Anda dapat menggunakan data terstruktur dalam kueri SQL menggunakan jenis ARRAY<>
dan STRUCT<>
. Misalnya, Anda dapat menulis kueri yang menampilkan semua Album
untuk artis menggunakan ARRAY
dari STRUCT
(dengan memanfaatkan data
yang telah digabungkan sebelumnya). Untuk mengetahui informasi selengkapnya, lihat bagian
Subkueri
dalam dokumentasi.
Anda dapat menjalankan kueri SQL di halaman Spanner Studio di konsol Google Cloud . Secara umum, kueri yang melakukan pemindaian tabel penuh pada tabel besar sangat mahal, dan harus digunakan dengan hemat. Untuk mengetahui informasi selengkapnya tentang cara mengoptimalkan kueri SQL, lihat dokumentasi praktik terbaik SQL.
Prosedur tersimpan dan pemicu
Spanner tidak mendukung menjalankan kode pengguna di tingkat database. Sebagai bagian dari migrasi skema, pindahkan prosedur tersimpan dan pemicu logika bisnis yang Anda terapkan di tingkat database MySQL ke dalam aplikasi Anda.
Urutan
Spanner merekomendasikan penggunaan UUID Versi 4 sebagai metode default untuk membuat nilai kunci primer. Fungsi
GENERATE_UUID()
menampilkan nilai UUID Versi 4 yang ditampilkan sebagai jenis STRING
.
Jika Anda perlu membuat nilai bilangan bulat, Spanner mendukung urutan positif yang dibalik bitnya, yang menghasilkan nilai yang didistribusikan secara merata di seluruh ruang angka 64-bit positif. Anda dapat menggunakan nomor ini untuk menghindari masalah hot spot.
Untuk mengetahui informasi selengkapnya, lihat strategi nilai default kunci utama.