Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Azure Cosmos DB for PostgreSQL tidak lagi didukung untuk proyek baru. Jangan gunakan layanan ini untuk proyek baru. Sebagai gantinya, gunakan salah satu dari dua layanan ini:
Gunakan Azure Cosmos DB for NoSQL untuk solusi database terdistribusi yang dirancang untuk skenario skala tinggi dengan perjanjian tingkat layanan ketersediaan (SLA) 99,999%, skala otomatis instan, dan failover otomatis di beberapa wilayah.
Gunakan fitur Elastic Clusters dari Azure Database For PostgreSQL untuk PostgreSQL yang dipecah menggunakan ekstensi Citus sumber terbuka.
Panduan cepat ini menunjukkan kepada Anda cara menggunakan kode Ruby untuk menghubungkan ke kluster, dan menggunakan kueri SQL untuk membuat tabel. Anda kemudian akan menyisipkan, mengkueri, memperbarui, dan menghapus data dalam database. Langkah-langkah dalam artikel ini mengasumsikan bahwa Anda terbiasa dengan pengembangan Ruby, dan baru bekerja dengan Azure Cosmos DB for PostgreSQL.
Menginstal pustaka PostgreSQL
Contoh kode dalam artikel ini memerlukan permata pg . Anda harus menginstal pg dengan manajer paket bahasa pemrograman Anda (seperti bundler).
Menyambungkan, membuat tabel, dan menyisipkan data
Gunakan kode berikut untuk menyambungkan dan membuat tabel dengan menggunakan pernyataan CREATE TABLE SQL, lalu tambahkan baris ke tabel dengan menggunakan pernyataan INSERT INTO SQL. Kode ini menggunakan PG::Connection objek dengan konstruktor untuk menyambungkan ke Azure Cosmos DB for PostgreSQL. Lalu kode tersebut akan memanggil metode exec() untuk menjalankan perintah DROP, CREATE TABLE, dan INSERT INTO. Kode akan memeriksa kesalahan menggunakan kelas PG::Error. Kemudian kode akan memanggil metode close() untuk menutup koneksi sebelum mengakhirinya.
Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator atau token ID Microsoft Entra Anda.
require 'pg'
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database'
# Drop previous table of same name if one exists
connection.exec('DROP TABLE IF EXISTS pharmacy;')
puts 'Finished dropping table (if existed).'
# Drop previous table of same name if one exists.
connection.exec('CREATE TABLE pharmacy (pharmacy_id integer ,pharmacy_name text,city text,state text,zip_code integer);')
puts 'Finished creating table.'
# Insert some data into table.
connection.exec("INSERT INTO pharmacy (pharmacy_id,pharmacy_name,city,state,zip_code) VALUES (0,'Target','Sunnyvale','California',94001);")
connection.exec("INSERT INTO pharmacy (pharmacy_id,pharmacy_name,city,state,zip_code) VALUES (1,'CVS','San Francisco','California',94002);")
puts 'Inserted 2 rows of data.'
# Create index
connection.exec("CREATE INDEX idx_pharmacy_id ON pharmacy(pharmacy_id);")
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Mendistribusikan tabel
Azure Cosmos DB for PostgreSQL memberi Anda kekuatan super dalam mendistribusikan tabel di beberapa simpul untuk skalabilitas. Perintah di bawah ini memungkinkan Anda untuk mendistribusikan tabel. Anda dapat mempelajari selengkapnya tentang create_distributed_table dan kolom distribusi di sini.
Catatan
Pendistribusian tabel memungkinkan mereka berkembang di setiap simpul pekerja yang ditambahkan ke kluster.
Gunakan kode berikut untuk menyambungkan ke database dan mendistribusikan tabel. Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database.'
# Super power of distributed tables.
connection.exec("select create_distributed_table('pharmacy','pharmacy_id');")
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Membaca data
Gunakan kode berikut untuk menyambungkan dan membaca data menggunakan pernyataan SQL SELECT.
Kode memanggil metode exec() untuk menjalankan perintah SELECT, menyimpan hasil dalam tataan hasil. Kumpulan hasil diiterasi menggunakan resultSet.each perulangan do, mempertahankan nilai baris saat ini dalam variabel baris. Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database.'
resultSet = connection.exec('SELECT * from pharmacy')
resultSet.each do |row|
puts 'Data row = (%s, %s, %s, %s, %s)' % [row['pharmacy_id'], row['pharmacy_name'], row['city'], row['state'], row['zip_code ']]
end
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Memperbarui data
Gunakan kode berikut untuk menyambungkan dan memperbarui data dengan menggunakan pernyataan UPDATE SQL. Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database.'
# Modify some data in table.
connection.exec('UPDATE pharmacy SET city = %s WHERE pharmacy_id = %d;' % ['\'guntur\'',100])
puts 'Updated 1 row of data.'
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Menghapus data
Gunakan kode berikut untuk menyambungkan dan menghapus data menggunakan pernyataan SQL DELETE. Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database.'
# Delete some data in table.
connection.exec('DELETE FROM pharmacy WHERE city = %s;' % ['\'guntur\''])
puts 'Deleted 1 row of data.'
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Perintah COPY untuk penyerapan super cepat
Perintah COPY dapat menghasilkan throughput yang luar biasa sambil menyerap data ke Azure Cosmos DB for PostgreSQL. Perintah COPY dapat menyerap data dalam file, atau dari batch mikro data dalam memori untuk penyerapan real time.
Perintah COPY untuk memuat data dari file
Kode berikut menyalin data dari file CSV ke tabel database. Ini membutuhkan file pharmacies.csv. Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
begin
filename = String('pharmacies.csv')
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database.'
# Copy the data from Csv to table.
result = connection.copy_data "COPY pharmacy FROM STDIN with csv" do
File.open(filename , 'r').each do |line|
connection.put_copy_data line
end
puts 'Copied csv data successfully.'
end
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Perintah COPY untuk memuat data dalam memori
Kode berikut menyalin data dalam memori ke tabel. Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
puts 'Successfully created connection to database.'
enco = PG::TextEncoder::CopyRow.new
connection.copy_data "COPY pharmacy FROM STDIN", enco do
connection.put_copy_data [5000,'Target','Sunnyvale','California','94001']
connection.put_copy_data [5001, 'CVS','San Francisco','California','94002']
puts 'Copied in-memory data successfully.'
end
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Aplikasi mencoba ulang untuk kegagalan permintaan basis data
Terkadang ada kemungkinan permintaan database dari aplikasi Anda gagal. Masalah tersebut dapat terjadi dalam skenario yang berbeda, seperti kegagalan jaringan antara aplikasi dan database, kata sandi yang salah, dll. Beberapa masalah mungkin bersifat sementara dan selesai sendiri dalam beberapa detik atau menit. Anda dapat mengonfigurasi logika coba lagi di aplikasi Anda untuk mengatasi kesalahan sementara.
Mengonfigurasi logika coba lagi di aplikasi Anda membantu meningkatkan pengalaman pengguna akhir. Dalam skenario kegagalan, pengguna hanya akan menunggu sedikit lebih lama sampai aplikasi melayani permintaan alih-alih mengalami kesalahan.
Contoh di bawah ini menunjukkan cara menerapkan logika coba lagi di aplikasi Anda. Cuplikan kode sampel mengulang permintaan database setiap 60 detik (hingga lima kali) sampai berhasil. Jumlah dan frekuensi percobaan ulang dapat dikonfigurasi sesuai kebutuhan aplikasi Anda.
Dalam kode, ganti <kluster> dengan nama kluster dan <kata sandi> Anda dengan kata sandi administrator Anda.
require 'pg'
def executeretry(sql,retryCount)
begin
for a in 1..retryCount do
begin
# NOTE: Replace <cluster> and <password> in the connection string.
connection = PG::Connection.new("host=c-<cluster>.<uniqueID>.postgres.cosmos.azure.com port=5432 dbname=citus user=citus password=<password> sslmode=require")
resultSet = connection.exec(sql)
return resultSet.each
rescue PG::Error => e
puts e.message
sleep 60
ensure
connection.close if connection
end
end
end
return nil
end
var = executeretry('select 1',5)
if var !=nil then
var.each do |row|
puts 'Data row = (%s)' % [row]
end
end
Langkah berikutnya
- Lihat bagaimana Azure Cosmos DB for PostgreSQL API memperluas PostgreSQL, dan mencoba kueri diagnostik yang berguna
- Pilih ukuran kluster terbaik untuk beban kerja Anda
- Memantau kinerja kluster