Bagikan melalui


Fitur T-SQL yang didukung di Azure Synapse SQL

Azure Synapse SQL adalah layanan analitik big data yang memungkinkan Anda untuk mengkueri dan menganalisis data Anda menggunakan bahasa T-SQL. Anda dapat menggunakan dialek bahasa SQL standar yang mematuhi ANSI yang digunakan pada SQL Server dan Azure SQL Database untuk analisis data.

Bahasa Transact-SQL yang digunakan dalam kumpulan SQL nirserver dan model terdedikasi dapat mereferensikan berbagai objek dan memiliki beberapa perbedaan dalam set fitur yang didukung. Di halaman ini, Anda dapat menemukan perbedaan bahasa Transact-SQL tingkat tinggi antar model konsumsi Synapse SQL.

Objek database

Model konsumsi di Synapse SQL memungkinkan Anda menggunakan berbagai objek database. Perbandingan jenis objek yang didukung ditampilkan dalam tabel berikut ini:

Objek Khusus Tanpa server
Tabel Ya Tidak, tabel dalam database tidak didukung. Kumpulan SQL tanpa server hanya dapat mengkueri tabel eksternal yang mereferensikan data yang disimpan di penyimpanan Azure Data Lake atau Dataverse.
Tampilan Ya. Tampilan bisa menggunakan elemen bahasa kueri yang tersedia dalam model terdedikasi. Ya, Anda dapat membuat tampilan tabel eksternal, kueri dengan fungsi OPENROWSET, dan tampilan lainnya. Tampilan bisa menggunakan elemen bahasa kueri yang tersedia dalam model nirserver.
Skema Ya Ya, skema didukung. Gunakan skema untuk mengisolasi penyewa yang berbeda dan menempatkan tabel mereka per skema.
Tabel sementara Ya Tabel sementara dapat digunakan hanya untuk menyimpan beberapa informasi dari tampilan sistem, harfiah, atau tabel sementara lainnya. UPDATE/DELETE pada tabel temp juga didukung. Anda dapat menggabungkan tabel sementara dengan tampilan sistem. Anda tidak dapat memilih data dari tabel eksternal untuk memasukkannya ke dalam tabel sementara atau menggabungkan tabel sementara dengan tabel eksternal - operasi ini akan gagal karena data eksternal dan tabel sementara tidak dapat dicampur dalam kueri yang sama.
Prosedur yang ditetapkan pengguna Ya Ya, prosedur yang disimpan dapat ditempatkan di database pengguna apa pun (bukan database master). Prosedur hanya dapat membaca data eksternal dan menggunakan elemen bahasa kueri yang tersedia di kumpulan tanpa server.
Fungsi yang Ditentukan Pengguna Ya Ya, hanya fungsi berbaris senilai tabel yang didukung. Fungsi yang ditentukan pengguna skalar tidak didukung.
Memicu No Tidak, kumpulan SQL tanpa server tidak memungkinkan perubahan data, sehingga pemicu tidak dapat bereaksi pada perubahan data.
Tabel eksternal Ya. Lihat format data yang didukung. Ya, tabel eksternal tersedia dan dapat digunakan untuk membaca data dari penyimpanan Azure Data Lake atau Dataverse. Lihat format data yang didukung.
Kueri penembolokan Ya, beberapa bentuk (penembolokan berbasis SSD, dalam memori, penembolokan rangkaian tataan hasil). Selain itu, Tampilan Materialisasi didukung. Tidak, hanya statistik file yang di-cache.
Penembolokan tataan hasil Ya Tidak, hasil kueri tidak di-cache. Hanya statistik file yang di-cache.
Tampilan Materialisasi Ya Tidak, tampilan Materialisasi tidak didukung di kumpulan SQL tanpa server.
Variabel tabel Tidak, gunakan tabel sementara Tidak, variabel tabel tidak didukung.
Distribusi tabel Ya Tidak, distribusi tabel tidak didukung.
Indeks tabel Ya Tidak, indeks tidak didukung.
Tabel partisi Ya. Tabel eksternal tidak mendukung partisi. Anda dapat mempartisi file menggunakan struktur folder partisi Apache Hive dan membuat tabel yang dipartisi di Spark. Partisi Spark akan disinkronkan dengan kumpulan tanpa server. Jika Anda tidak menggunakan Spark, Anda dapat mempartisi file dalam struktur folder dan dapat membuat tampilan yang dipartisi pada struktur partisi folder, tetapi tabel eksternal tidak dapat dibuat pada folder yang dipartisi.
Statistik Ya Ya, statistik dibuat pada file eksternal.
Pengelolaan beban kerja, kelas sumber daya, dan kontrol konkurensi Ya, lihat pengelolaan beban kerja, kelas sumber daya, dan kontrol konkurensi. Tidak, Anda tidak dapat mengelola sumber daya yang ditetapkan ke kueri. Kumpulan SQL tanpa server secara otomatis mengelola sumber daya.
Kontrol biaya Ya, menggunakan tindakan menaikkan dan menurunkan skala. Ya, Anda dapat membatasi penggunaan kumpulan tanpa server harian, mingguan, atau bulanan menggunakan portal Azure atau prosedur T-SQL.

Bahasa kueri

Bahasa kueri yang digunakan dalam Synapse SQL dapat memiliki berbagai fitur yang didukung tergantung dari model konsumsi. Tabel berikut menguraikan perbedaan bahasa kueri yang paling penting dalam dialek Transact-SQL:

Pernyataan Khusus Tanpa server
Pernyataan SELECT Ya. Pernyataan SELECT didukung, tetapi beberapa klausul kueri T-SQL, seperti FOR XML/FOR JSON, MATCH, OFFSET/FETCH tidak didukung. Ya, pernyataan SELECT didukung, tetapi beberapa klausul kueri T-SQL seperti FOR XML, MATCH, PREDICT, GROUPNG SETS, dan petunjuk kueri tidak didukung.
Pernyataan INSERT Ya Tidak. Unggah data baru ke Data Lake menggunakan Spark atau alat lainnya. Gunakan Azure Cosmos DB dengan penyimpanan analitik untuk beban kerja yang sangat transaksional. Anda dapat menggunakan CETAS untuk membuat tabel eksternal dan menyisipkan data.
Pernyataan UPDATE Ya Tidak, perbarui data Parquet/CSV menggunakan Spark dan perubahan akan tersedia secara otomatis di kumpulan tanpa server. Gunakan Azure Cosmos DB dengan penyimpanan analitik untuk beban kerja yang sangat transaksional.
Pernyataan DELETE Ya Tidak, hapus data Parquet/CSV menggunakan Spark dan perubahan akan tersedia secara otomatis di kumpulan tanpa server. Gunakan Azure Cosmos DB dengan penyimpanan analitik untuk beban kerja yang sangat transaksional.
Pernyataan MERGE Ya (pratinjau) Tidak, gabungkan data Parquet/CSV menggunakan Spark dan perubahan akan tersedia secara otomatis di kumpulan tanpa server.
Pernyataan CTAS Ya Tidak, pernyataan CREATE TABLE AS SELECT tidak didukung di kumpulan SQL tanpa server.
Pernyataan CETAS Ya, Anda dapat melakukan beban awal ke tabel eksternal menggunakan CETAS. Ya, Anda dapat melakukan beban awal ke tabel eksternal menggunakan CETAS. CETAS mendukung format output Parquet dan CSV.
Transaksi Ya Ya, transaksi hanya berlaku pada objek meta-data.
Label Ya Tidak, label tidak didukung oleh kumpulan SQL tanpa server.
Muatan data Ya. Utilitas yang lebih dipilih adalah pernyataan COPY, tetapi sistem mendukung muatan BULK (BCP) dan CETAS untuk pemuatan data. Tidak, Anda tidak dapat memuat data ke dalam kumpulan SQL tanpa server karena data disimpan di penyimpanan eksternal. Awalnya, Anda dapat memuat data ke tabel eksternal menggunakan pernyataan CETAS.
Ekspor Data Ya. Penggunaan CETAS. Ya. Anda dapat mengekspor data dari penyimpanan eksternal (Azure Data Lake, Dataverse, Azure Cosmos DB) ke azure data lake menggunakan CETAS.
Jenis Ya, semua jenis T-SQL kecuali cursor, hierarchyid, ntext, teks, dan gambar, rowversion, Jenis Spasial, sql_variant, dan xml Ya, semua jenis T-SQL kecuali cursor, hierarchyid, ntext, teks, dan gambar, rowversion, Jenis Spasial, sql_variant, xml, dan jenis Tabel. Lihat cara memetakan jenis kolom Parquet ke jenis SQL di sini.
Kueri lintas database No Ya, kueri lintas database dan referensi nama 3 bagian didukung termasuk pernyataan USE. Kueri dapat mereferensikan database SQL tanpa server atau database Lake di ruang kerja yang sama. Kueri lintas ruang kerja tidak didukung.
Fungsi bawaan/sistem (analisis) Ya, semua fungsi Analitik, Konversi, Tanggal dan Waktu, Logika, Matematika Transact-SQL, kecuali CHOOSE dan PARSE Ya, semua fungsi Analitik, Konversi, Tanggal dan Waktu, Logika, Matematika T-SQL didukung.
Fungsi sistem/bawaan(untai (karakter)) Ya. Semua fungsi String, JSON, dan Kolase Transact-SQL, kecuali STRING_ESCAPE dan TRANSLATE Ya. Semua fungsi String, JSON, dan Kolase T-SQL didukung.
Fungsi sistem/bawaan (Kriptografi) Beberapa HASHBYTES adalah satu-satunya fungsi kriptografi yang didukung dalam kumpulan SQL tanpa server.
Fungsi nilai tabel sistem/bawaan Ya, Fungsi Rowset Transact-SQL, kecuali OPENXML, OPENDATASOURCE, OPENQUERY, dan OPENROWSET Ya, semua fungsi T-SQL Rowset didukung, kecuali OPENXML, OPENDATASOURCE, dan OPENQUERY.
Agregat sistem/bawaan Agregat bawaan T-SQL, kecuali CHECKSUM_AGG dan GROUPING_ID Ya, semua agregat bawaan T-SQL didukung.
Operator Ya, semua operator T-SQL kecuali !> dan !< Ya, semua operator T-SQL didukung.
Kontrol aliran Ya. Semua pernyataan Kontrol aliran Transact-SQL kecuali CONTINUE, GOTO, RETURN, USE, dan WAITFOR Ya. Semua pernyataan Control-of-flow T-SQL didukung. Kueri SELECT dalam kondisi WHILE (...) tidak didukung.
Pernyataan DDL (CREATE, ALTER, DROP) Ya. Semua pernyataan Transact-SQL DDL yang berlaku untuk jenis objek yang didukung Ya, semua pernyataan didukung untuk DDL T-SQL yang berlaku untuk jenis objek yang didukung.

Keamanan

Kumpulan SQL Synapse memungkinkan Anda menggunakan fitur keamanan bawaan untuk mengamankan data dan mengontrol akses. Tabel berikut membandingkan perbedaan tingkat tinggi antar model konsumsi Synapse SQL.

Fitur Khusus Tanpa server
Masuk N/A (hanya pengguna yang ditampung yang didukung dalam database) Ya, login Microsoft Entra ID dan SQL tingkat server didukung.
Pengguna N/A (hanya pengguna yang ditampung yang didukung dalam database) Ya, pengguna database didukung.
Pengguna yang ditampung Ya. Catatan: hanya satu pengguna Microsoft Entra yang dapat menjadi admin yang tidak dibatasi Tidak, pengguna mandiri tidak didukung.
Autentikasi nama pengguna/kata sandi SQL Ya Ya, pengguna dapat mengakses kumpulan SQL tanpa server menggunakan nama pengguna dan kata sandi mereka.
Autentikasi Microsoft Entra Ya, pengguna Microsoft Entra Ya, login Microsoft Entra dan pengguna dapat mengakses kumpulan SQL tanpa server menggunakan identitas Microsoft Entra mereka.
Autentikasi passthrough Microsoft Entra Storage Ya Ya, autentikasi passthrough Microsoft Entra berlaku untuk login Microsoft Entra. Identitas pengguna Microsoft Entra diteruskan ke penyimpanan jika kredensial tidak ditentukan. Autentikasi passthrough Microsoft Entra tidak tersedia untuk pengguna SQL.
Autentikasi token tanda tangan akses bersama (SAS) No Ya, menggunakan INFO MASUK CAKUPAN DATABASE dengan token tanda tangan akses bersama di SUMBER DATA EKSTERNAL atau INFO MASUK tingkat instans dengan tanda tangan akses bersama.
Autentikasi Storage Access Key Ya, menggunakan DATABASE SCOPED CREDENTIAL di EXTERNAL DATA SOURCE Tidak, gunakan token SAS alih-alih kunci akses penyimpanan.
Autentikasi Storage Managed Identity Ya, menggunakan Managed Service Identity Credential Ya, Kueri dapat mengakses penyimpanan menggunakan info masuk Identitas Terkelola ruang kerja.
Autentikasi Identitas Aplikasi Penyimpanan/Perwakilan layanan (SPN) Ya Ya, Anda dapat membuat info masuk dengan ID aplikasi perwakilan layanan yang akan digunakan untuk mengautentikasi pada penyimpanan.
Peran server No Ya, sysadmin, publik, dan peran server lainnya didukung.
KREDENSIAL TINGKAT SERVER No Ya, kredensial tingkat server digunakan oleh OPENROWSET fungsi yang tidak menggunakan sumber data eksplisit.
Izin - Tingkat server No Ya, misalnya, CONNECT ANY DATABASE dan SELECT ALL USER SECURABLES memungkinkan pengguna untuk membaca data dari database apa pun.
Peran database Ya Ya, Anda dapat menggunakan peran db_owner, db_datareader, dan db_ddladmin.
DATABASE SCOPED CREDENTIAL Ya, digunakan dalam sumber data eksternal. Ya, info masuk cakupan database dapat digunakan dalam sumber data eksternal untuk menentukan metode autentikasi penyimpanan.
Izin - Tingkat database Ya Ya, Anda dapat memberikan, menolak, atau mencabut izin pada objek database.
Izin - Tingkat skema Ya, termasuk kemampuan untuk GRANT, DENY, dan REVOKE izin kepada pengguna/masuk pada skema Ya, Anda dapat menentukan izin tingkat skema termasuk kemampuan untuk MEMBERIKAN, MENOLAK, dan MENCABUT izin kepada pengguna/proses masuk pada skema.
Izin - Tingkat objek Ya, termasuk kemampuan untuk GRANT, DENY, dan REVOKE izin kepada pengguna Ya, termasuk kemampuan untuk MEMBERIKAN, MENOLAK, dan MENCABUT izin kepada pengguna/proses masuk pada objek sistem yang didukung.
Izin - Keamanan tingkat kolom Ya Keamanan tingkat kolom didukung di kumpulan SQL tanpa server untuk tampilan dan bukan untuk tabel eksternal. Dalam kasus tabel eksternal, seseorang dapat membuat tampilan logis di atas tabel eksternal dan daripada menerapkan keamanan tingkat kolom.
Keamanan tingkat baris Ya Tidak, tidak ada dukungan bawaan untuk keamanan tingkat baris. Gunakan tampilan kustom sebagai solusi.
Masking data Ya Tidak, penutupan data bawaan tidak didukung di kumpulan SQL tanpa server. Gunakan pembungkus SQL tampilan yang secara eksplisit menutupi beberapa kolom sebagai solusi.
Keamanan bawaan/sistem & fungsi identitas Beberapa fungsi dan operator keamanan T-SQL: CURRENT_USER, HAS_DBACCESS, IS_MEMBER, IS_ROLEMEMBER, SESSION_USER, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS, OPEN/CLOSE MASTER KEY Beberapa fungsi dan operator keamanan T-SQL didukung: CURRENT_USER, HAS_DBACCESS, HAS_PERMS_BY_NAME, IS_MEMBER, IS_ROLEMEMBER, IS_SRVROLEMEMBER, SESSION_USER, SESSION_CONTEXT, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS, dan REVERT. Fungsi keamanan tidak dapat digunakan untuk mengkueri data eksternal (menyimpan hasil dalam variabel yang bisa digunakan di kueri).
Transparent Data Encryption (TDE) Ya Tidak, Enkripsi Data Transparan tidak didukung.
Penemuan & Klasifikasi Data Ya Tidak, Penemuan & Klasifikasi Data tidak didukung.
Penilaian Kerentanan Ya Tidak, Penilaian Kerentanan tidak tersedia.
Perlindungan Tingkat Lanjut terhadap Ancaman Ya Tidak, Perlindungan Ancaman Tingkat Lanjut tidak didukung.
Audit Ya Ya, audit didukung di kumpulan SQL tanpa server.
Aturan Firewall Ya Ya, aturan firewall dapat diatur pada titik akhir SQL tanpa server.
Titik akhir privat Ya Ya, titik akhir privat dapat diatur pada kumpulan SQL tanpa server.

Kumpulan SQL terdedikasi dan kumpulan SQL nirserver menggunakan bahasa Transact-SQL standar untuk mengkueri data. Untuk perbedaan terperinci, lihat referensi bahasa Transact-SQL.

Fitur platform

Fitur Khusus Tanpa server
Penskalaan Ya Kumpulan SQL tanpa server secara otomatis diskalakan tergantung pada beban kerja.
Jeda/lanjutkan Ya Kumpulan SQL tanpa server secara otomatis dinonaktifkan saat tidak digunakan dan diaktifkan saat diperlukan. Tindakan pengguna tidak diperlukan.
Cadangan database Ya Tidak. Data disimpan dalam sistem eksternal (ADLS, Cosmos DB), jadi pastikan Anda melakukan pencadangan data di sumber. Pastikan Anda menggunakan metadata SQL penyimpanan (tabel, tampilan, definisi prosedur, dan izin pengguna) di kontrol sumber. Definisi tabel dalam database Lake disimpan dalam metadata Spark, jadi pastikan Anda juga menyimpan definisi tabel Spark dalam kontrol sumber.
Pemulihan database Ya Tidak. Data disimpan dalam sistem eksternal (ADLS, Cosmos DB), jadi Anda perlu memulihkan sistem sumber untuk membawa data Anda. Pastikan metadata SQL Anda (tabel, tampilan, definisi prosedur, dan izin pengguna) berada dalam kontrol sumber sehingga Anda dapat membuat ulang objek SQL. Definisi tabel dalam database Lake disimpan dalam metadata Spark, jadi pastikan Anda juga menyimpan definisi tabel Spark dalam kontrol sumber.

Alat

Anda dapat menggunakan berbagai alat untuk terhubung ke Synapse SQL untuk mengkueri data.

Alat Khusus Tanpa server
Synapse Studio Ya, skrip SQL Ya, skrip SQL dapat digunakan di Synapse Studio. Gunakan SQL Server Management Studio atau ADS alih-alih Synapse Studio jika Anda mengembalikan sejumlah besar data sebagai hasilnya.
Power BI Ya Ya, Anda dapat menggunakan Power BI untuk membuat laporan di kumpulan SQL tanpa server. Mode impor direkomendasikan untuk pelaporan.
Azure Analysis Service Ya Ya, Anda dapat memuat data di Azure Analysis Service menggunakan kumpulan SQL tanpa server.
Azure Data Studio (ADS) Ya Ya, Anda dapat menggunakan Azure Data Studio (versi 1.18.0 atau lebih tinggi) untuk mengkueri kumpulan SQL tanpa server. Skrip SQL dan SQL Notebooks didukung.
SQL Server Management Studio (SSMS) Ya Ya, Anda dapat menggunakan SQL Server Management Studio (versi 18.5 atau lebih tinggi) untuk mengkueri kumpulan SQL tanpa server. SQL Server Management Studio hanya menampilkan objek yang tersedia di kumpulan SQL tanpa server.

Catatan

Anda dapat menggunakan SSMS untuk terhubung ke kumpulan dan kueri SQL nirserver. Ia didukung sebagian mulai dari versi 18.5, Anda dapat menggunakannya untuk menghubungkan dan mengkueri saja.

Sebagian besar aplikasi yang menggunakan bahasa Transact-SQL standar dapat mengkueri model konsumsi terdedikasi maupun nirserver dari Synapse SQL.

Akses data

Data yang dianalisis dapat disimpan pada berbagai jenis penyimpanan. Tabel berikut ini mencantumkan semua opsi penyimpanan yang tersedia:

Jenis penyimpanan Khusus Tanpa server
Penyimpanan internal Ya Tidak, data ditempatkan di Azure Data Lake atau penyimpanan analitik Azure Cosmos DB.
Azure Data Lake v2 Ya Ya, Anda dapat menggunakan tabel eksternal dan fungsi OPENROWSET untuk membaca data dari ADLS. Pelajari di sini cara mengatur kontrol akses.
Penyimpanan Blob Azure Ya Ya, Anda dapat menggunakan tabel eksternal dan fungsi OPENROWSET untuk membaca data dari Azure Blob Storage. Pelajari di sini cara mengatur kontrol akses.
Azure SQL/SQL Server (jarak jauh) No Tidak, kumpulan SQL tanpa server tidak dapat mereferensikan database Azure SQL. Anda dapat mereferensikan kumpulan SQL tanpa server dari Azure SQL menggunakan kueri elastis atau server yang ditautkan.
Dataverse Tidak, Anda dapat memuat data Azure Cosmos DB ke kumpulan khusus menggunakan Azure Synapse Link di kumpulan SQL tanpa server (melalui ADLS) atau Spark. Ya, Anda dapat membaca tabel Dataverse menggunakan tautan Azure Synapse untuk Dataverse dengan Azure Data Lake.
Penyimpanan transaksional Azure Cosmos DB No Tidak, Anda tidak dapat mengakses kontainer Azure Cosmos DB untuk memperbarui data atau membaca data dari penyimpanan transaksional Azure Cosmos DB. Gunakan kumpulan Spark untuk memperbarui penyimpanan transaksional Azure Cosmos DB .
Penyimpanan analitik Azure Cosmos DB Tidak, Anda dapat memuat data Azure Cosmos DB ke dalam kumpulan khusus menggunakan Azure Synapse Link di kumpulan SQL tanpa server (melalui ADLS), ADF, Spark, atau beberapa alat beban lainnya. Ya, Anda dapat mengkueri penyimpanan analitik Azure Cosmos DB menggunakan Azure Synapse Link.
Tabel Apache Spark (di ruang kerja) No Ya, kumpulan tanpa server dapat membaca tabel PARQUET dan CSV menggunakan sinkronisasi metadata.
Tabel Apache Spark (jarak jauh) No Tidak, kumpulan tanpa server hanya dapat mengakses tabel PARQUET dan CSV yang dibuat di kumpulan Apache Spark di ruang kerja Synapse yang sama. Namun, Anda dapat membuat tabel eksternal secara manual yang mereferensikan lokasi tabel Spark eksternal.
Tabel Databricks (jarak jauh) No Tidak, kumpulan tanpa server hanya dapat mengakses tabel PARQUET dan CSV yang dibuat di kumpulan Apache Spark di ruang kerja Synapse yang sama. Namun, Anda dapat membuat tabel eksternal secara manual yang mereferensikan lokasi tabel Databricks.

Format data

Data yang dianalisis dapat disimpan di berbagai format penyimpanan. Tabel berikut ini mencantumkan semua format data yang tersedia yang bisa dianalisis:

Format data Khusus Tanpa server
Berbatas Ya Ya, Anda dapat mengkueri file yang dibatasi.
CSV Ya (pembatas multi-karakter tidak didukung) Ya, Anda dapat mengkueri file CSV. Untuk performa yang lebih baik, gunakan PARSER_VERSION 2.0 yang memberikan penguraian yang lebih cepat. Jika Anda menambahkan baris ke file CSV, pastikan Anda mengkueri file sebagai dapat ditambahkan.
Parquet Ya Ya, Anda dapat mengkueri file Parquet, termasuk file dengan jenis berlapis.
Hive ORC Ya Tidak, kumpulan SQL tanpa server tidak dapat membaca format Apache Hive ORC.
Hive RC Ya Tidak, kumpulan SQL tanpa server tidak dapat membaca format Apache Hive RC.
JSON Ya Ya, Anda dapat mengkueri file JSON menggunakan format teks yang dibatasi dan fungsi T-SQL JSON.
Avro No Tidak, kumpulan SQL tanpa server tidak dapat membaca format Avro.
Delta Lake No Ya, Anda dapat mengkueri file delta lake, termasuk file dengan jenis berlapis.
Common Data Model (CDM) No Tidak, kumpulan SQL tanpa server tidak dapat membaca data yang disimpan menggunakan Common Data Model.

Langkah berikutnya

Informasi lainnya tentang praktik terbaik untuk kumpulan SQL khusus dan kumpulan SQL tanpa server dapat ditemukan di artikel berikut: