Apa yang dimaksud dengan kinerja lebih cepat? Membuat REST API dan meminta aplikasi web Anda menggunakan REST API untuk melakukan semua interaksi dengan database Anda ATAU menanyakan database Anda secara langsung (yaitu menggunakan objek khas apa pun yang digunakan bahasa Anda untuk melakukan query pada database seperti JDBC untuk Java)?
Cara saya melihatnya dengan REST:
- Anda membuat objek dalam kode Anda untuk memanggil metode REST
- Panggil metode http
- Kode di dalam REST API Anda menanyakan basis data
- Database mengembalikan beberapa data
- Kode API REST mengemas data ke Json dan mengirimkannya ke klien Anda
- Klien menerima respons Json / XML
- Respons peta terhadap objek dalam kode Anda
Di sisi lain, menanyakan database secara langsung:
- Anda membuat objek dengan string kueri untuk query database
- Database mengembalikan beberapa data
- Respons peta terhadap objek dalam kode Anda
Jadi bukankah ini berarti menggunakan REST API akan lebih lambat? Mungkin itu tergantung pada jenis database (SQL vs NoSQL)?
Jawaban:
Ketika Anda menambahkan kompleksitas, kode akan berjalan lebih lambat. Memperkenalkan layanan REST jika tidak diperlukan akan memperlambat eksekusi karena sistem melakukan lebih banyak.
Mengabstraksi database adalah praktik yang baik. Jika Anda khawatir tentang kecepatan, Anda bisa melihat cache data dalam memori sehingga database tidak perlu disentuh untuk menangani permintaan.
Sebelum mengoptimalkan kinerja meskipun saya akan melihat ke masalah apa yang Anda coba selesaikan dan arsitektur yang Anda gunakan, saya berjuang untuk memikirkan situasi di mana opsi basis data akan menjadi akses langsung vs REST.
sumber
extra work
. Tetapi sebenarnya itu bisa lebih cepat dengan caching permintaan berulang.Jika Anda khawatir tentang kecepatan, maka ya layanan Istirahat akan lebih lambat karena alasan yang disebutkan di atas. Namun, kecepatan tipe yang Anda gambarkan jarang menjadi perhatian utama dan jika ya, dapat diatasi dengan cara lain. Optimalisasi prematur adalah akar dari semua kejahatan .
Pertimbangkan jika perhatian utama Anda adalah interoperabilitas (seluler, web, B2B), sekarang REST sangat menarik karena merupakan teknologi agnostik.
Misalkan Anda kode untuk basis data. Apa yang akan Anda lakukan jika Anda memilih untuk mengubah penyimpanan data yang mendasarinya. Seberapa sulit untuk dilakukan jika Anda tergabung erat dengan toko yang mendasarinya?
Jawaban sebenarnya tergantung , tapi mudah-mudahan saya telah memberi Anda beberapa hal untuk dipikirkan!
sumber
Jika sulit menjawab pertanyaan ini.
Jawaban umum yang benar adalah: itu tergantung.
Ada kesalahan dalam pikiran Anda.
Dan kesalahan ini berasal dari fakta, bahwa Anda tidak sepenuhnya memahami REST dan prinsip-prinsipnya. REST tidak ditemukan, karena beberapa kutu buku merasa keren (tentu saja) untuk mengirim objek Javascript melalui HTTP melalui kabel. Keuntungan utama menggunakan HTTP adalah kemungkinan menggunakan Caching . Jika Anda membuat hasil Anda dapat disimpan dalam cache , maka ada lebih sedikit permintaan untuk dibuat ke DB. Dan tidak ada marshalling yang terlibat. Jawabannya bisa disampaikan langsung.
Jawaban Insofar @Klees tidak tepat :
Ketika berhadapan dengan hasil cacheables, tidak ada dampak pada aplikasi Anda: memberikan jawaban yang diketahui untuk pertanyaan yang diketahui dapat dilakukan melalui proksi terbalik.
sumber
Memperkenalkan tier layanan ekstra selalu memiliki biaya dalam kompleksitas dan overhead kinerja. Ada beberapa jenis arsitektur tertentu di mana memperkenalkan tier layanan bersama (seperti REST API) dapat meningkatkan daya karena caching bersama - tetapi sepertinya itu bukan jenis arsitektur yang Anda miliki.
Pertimbangkan arsitektur tempat Anda memiliki beberapa aplikasi web atau beberapa aplikasi desktop yang terhubung langsung ke database yang sama. Jika mereka sering melakukan permintaan yang sama, itu dapat meningkatkan kinerja untuk men-cache hasil query di layanan bersama. Terutama jika Anda telah mengatakan ratusan aplikasi desktop mengakses database yang sama secara langsung (bukan melalui aplikasi web!) Dan melakukan pertanyaan yang sama, mungkin ada peningkatan besar. Namun, bahkan dalam arsitektur ini, alasan utama untuk memperkenalkan layanan bersama mungkin adalah keamanan dan abstraksi data daripada kinerja.
Tapi sepertinya Anda memiliki satu aplikasi web yang terhubung ke database secara langsung. Dalam hal ini tidak ada manfaatnya untuk memperkenalkan lapisan layanan tambahan. Caching, abstraksi basis data, dll. Dapat ditangani pada lapisan akses data dalam aplikasi yang sama.
sumber
Tergantung.
Jelas, semakin banyak lapisan dalam kode Anda semakin lambat. Tapi ... ada titik di mana kinerja ujung-ke-ujung langsung tidak masalah sebanyak skalabilitas. Jika Anda memiliki 1 pengguna yang mengakses database Anda di PC lokal, itu bisa berjalan cepat. Jika Anda memiliki seribu pengguna yang mengakses DB yang sama di PC yang sama, kemungkinan Anda akan melihat mereka semua merasa frustrasi. Solusinya adalah dengan memindahkan DB ke kotak lain, tambahkan layer di tengah dan meskipun untuk 1 pengguna, itu akan melakukan lebih lambat, ketika ribuan mengaksesnya, itu akan lebih cepat. (itu jawaban yang simplistis tetapi benar secara prinsip).
Ada alasan lain untuk menyembunyikan DB Anda di belakang lapisan tingkat menengah, seperti keamanan.
sumber
Saya tidak tahu di mana Anda tersesat, tetapi cukup jelas, ketika Anda menggunakan REST API Anda melakukan langkah ekstra, dan langkah tambahan "selalu" berarti lebih lambat ketika pemrograman terlibat.
Ada pro dan kontra, tetapi jika Anda dapat mengakses database langsung dari aplikasi Anda, lebih baik menyebutnya langsung daripada menggunakan Web API, tentu saja jika Anda menggunakan Web API Anda dapat dengan mudah mem-port aplikasi Anda ke platform yang berbeda.
sumber
SISA:
DB lokal:
PERBEDAAN INI SANGAT BESAR, ORANG-ORANG YANG SERING LUPA
sumber