Apakah MongoDB pilihan yang tepat dalam kasus saya? [Tutup]


9

Saya akan membangun proyek nyata pertama saya di Rails yang terdiri dari aplikasi web yang terbuat dari 3 bagian utama:

  • Bagian statis di mana tidak ada basis data yang digunakan
  • Bagian pendaftaran pengguna yang akan membutuhkan database dan saya dapat menggunakan MySQL karena setiap baris pengguna akan memiliki bidang yang sama
  • "App" tempat pengguna dapat membuat, mengatur, mengedit ... item dalam koleksi dan membaginya dengan pengguna lain

Akan ada beberapa jenis item dan masing-masing akan memiliki opsi yang berbeda misalnya saya mungkin memiliki "video" item dengan opsi berikut:

  • Indo
  • identitas pengguna
  • collection_id
  • judul
  • platform (jika tertanam)
  • url (jika tertanam)
  • nama file (jika dihosting di aplikasi saya)
  • ukuran file (id dihosting di aplikasi saya)

dan item "peta":

  • Indo
  • identitas pengguna
  • collection_id
  • judul
  • platform (google maps, bing maps ...)
  • lokasi
  • url
  • ukuran peta

Seperti yang Anda bisa sementara untuk pengguna saya dapat menggunakan MySQL untuk item fleksibilitas MongoDB mungkin berguna karena setiap item mungkin memerlukan opsi yang berbeda maka item lain

Hingga kini saya selalu menggunakan PHP dan MySQL (selalu menggunakan shared hosting untuk proyek-proyek kecil) dan skalabilitas adalah kata yang sama sekali baru bagi saya.

Saya punya waktu untuk belajar tetapi saya ingin dapat melakukan sesuatu yang konkret dalam waktu 1 bulan.

Saya sudah membaca banyak tentang MongoDB dan NoSQL vs RDMS dan MySQL dan setelah mencobanya saya harus mengatakan bahwa saya suka cara kerja MongoDB: tidak ada tabel, tidak ada baris dan dokumennya JSON seperti:

  • Dalam situasi saya, apa yang akan Anda sampaikan? Mengapa?
  • Tentang skalabilitas mungkin ada masalah dengan MongoDB? jika ya kapan (dalam hal ukuran DB) dan dapatkah masalah ini memperlambat aplikasi saya?

Sunting: bagaimana aplikasi akan bekerja

Karena banyak yang bertanya ini bagaimana saya ingin aplikasi bekerja:

  1. Seorang pengguna mendaftar
  2. Dia login
  3. Dia menciptakan iside koleksi pertamanya yang dia dapat membuat item yang tak terbatas
  4. Item dari berbagai jenis dan masing-masing jenis memerlukan data yang berbeda untuk disimpan dalam database dan jenis item dapat ditambahkan atau dimodifikasi

Pengguna dapat membuat koleksi dan barang lain di dalamnya.

Jadi kami memiliki CRUD untuk koleksi dan item di dalamnya dan setiap koleksi / item dirujuk ke pengguna tertentu

Masalah utama dengan MySQL adalah bahwa ia tidak memiliki skema yang fleksibel, ada cara untuk menyelesaikan ini (solusi?)

Berpikir tentang NoSQL, satu-satunya keraguan yang saya miliki adalah tentang bergabung, misalnya diberi kolom tertentu, saya ingin mengambil data yang terkait dengan Pengguna dengan bidang id = user_id dalam koleksi

EDIT: Ide untuk tetap menggunakan MySQL

Buat bidang di tabel "item" dengan pengaturan opsional, masing-masing pengaturan dibagi dengan | atau simbol lain.

Kemudian saya akan menyimpan suatu tempat struktur dari setiap item pengaturan opsional, misalnya jenis item "catatan" perlu dua pengaturan opsional "warna" dan "odd_setting", ketika saya mendapatkan data dari MySQL saya akan membagi bidang untuk pengaturan opsional menjadi sebuah array mengetahui bahwa item pertama dalam array adalah untuk "warna" dan seterusnya.

Bagaimana menurut anda? ada masalah dengan solusi itu? apakah kamu punya ide lain


4
Pertanyaan Matteo tentang rekomendasi teknologi adalah di luar topik, kecuali jika Anda memberi kami masalah khusus yang Anda coba selesaikan. Anda harus memberi kami sedikit lebih banyak informasi tentang proyek Anda, dan mengapa Anda pikir Anda perlu menggunakan database selain MySQL (yang merupakan salah satu yang Anda kenal). Misalnya: Apakah ada masalah skalabilitas, dan berapa banyak waktu yang Anda miliki untuk menyelidiki teknologi baru. Pertimbangkan merevisi pertanyaan Anda dan jika Anda melakukannya, beri tanda untuk perhatian moderat sehingga kami dapat meninjau hasil edit Anda.
yannis

Jawaban:


10

Kami mungkin tidak dapat membantu Anda sampai Anda memberi tahu kami apa yang ingin Anda lakukan dengan aplikasi tersebut. Database relasional baik untuk hal-hal tertentu, dan database NoSQL baik untuk orang lain.

Seperti yang pernah dikatakan seseorang kepada saya di sini di SO:

bagian relasional dari DB relasional jauh lebih dioptimalkan daripada beberapa bagian lainnya

Ini berarti Anda dapat menggunakan basis data relasional juga jika itu cocok dengan kasus penggunaan Anda. Jangan hanya melanjutkan dengan MongoDB karena fleksibilitas / skalabilitasnya. Ini adalah baris pertama tentang MongoDB di Wikipedia:

MongoDB (dari "humongous") adalah sistem database NoSQL yang berorientasi pada dokumen sumber terbuka.

Apakah Anda benar-benar berniat untuk menggunakan DB yang berorientasi pada dokumen? Jika ada beberapa graphiness dalam kasus penggunaan Anda, maka Anda mungkin pergi ke basis data grafik seperti Neo4j. Atau Anda bisa menggunakan SQL dan NoSQL yang terbaik bersama-sama seperti yang dilakukan beberapa orang.

BTW, saya juga sedang melakukan proyek di mana saya menggunakan bagian terbaik dari SQL dan NoSQL.

EDIT: Saya katakan sekali lagi:

Lihat bagian Neo4j vs Hadoop pada artikel ini . Ia mengatakan:

Pada prinsipnya, Hadoop dan toko Key-Value lainnya sebagian besar berkaitan dengan struktur data yang relatif datar . Artinya, mereka sangat cepat dan dapat diskalakan terkait pengambilan objek sederhana, seperti nilai, dokumen, atau bahkan objek.

Mengacu pada artikel yang sama, apakah Anda benar-benar membutuhkan struktur data datar yang Anda inginkan untuk MongoDB? Ini pada akhirnya tergantung pada kasus penggunaan terperinci Anda, bagaimana langkah 3 dan 4 akan dilakukan.

Selain itu, Anda mungkin ingin merujuk pertanyaan ini:

/programming/2124274/mongodb-what-to-know-before-using

/programming/1476295/when-to-use-mongodb-or-other-document-oriented-database-systems

( Lihat jawaban atas / yang dipilih dari pertanyaan kedua dengan pasti. Anda berada dalam dilema yang mungkin baru saja dipecahkan. )

Saya kira pertanyaan-pertanyaan ini memiliki semua info yang ingin Anda ketahui. Pada akhirnya, Andalah yang harus memutuskan apakah itu MongoDb atau yang lainnya, kami hanya dapat merekomendasikan. Satu-satunya orang yang mengetahui kasus penggunaan terperinci Anda adalah Anda dan tim Anda.

EDIT LAGI (untuk bagian MySQL): Seperti yang saya mengerti, Anda berencana menyimpan sesuatu di db dan memisahkannya melalui pemisah. Ini menyajikan 2 masalah:

  1. Anda perlu menangani input apa pun yang memiliki pemisah.
  2. Bagian penyimpanan relasional dari basis data relasional jauh lebih dioptimalkan daripada bagian pencocokan string. Saya tidak akan pergi untuk skema di mana saya perlu melakukan pencocokan string dalam database untuk mendapatkan hasil tertentu. Sekali lagi saya menekankan:

    bagian relasional dari DB relasional jauh lebih dioptimalkan daripada beberapa bagian lain (misalnya pencocokan string)

  3. Jangan gunakan atribut multinilai. Orang-orang pada umumnya takut.

terutama saya akan menggunakan MongoDB untuk skema fleksibel tapi saya ragu karena tidak bergabung. Pokoknya di aplikasi saya, saya akan memiliki dtabase untuk pengguna dan kemudian dasar creud di mana setiap elemen dikaitkan dengan pengguna dan kumpulan elemen
Matteo Pagliazzi

Anda tidak perlu bergabung untuk mongo tetapi Anda harus merencanakan skema Anda. Pikirkan istilah objek daripada tabel jika Anda menggunakan mongo. Kemudian pikirkan bagaimana Anda akan mengakses objek Anda.
ltfishie

8

Saya sering melihat pertanyaan ini. Tampaknya selalu dianggap sebagai salah satu dari ini. MongoDB adalah alat baru yang hebat. Kadang-kadang juga tampak sebagai alat mengkilap untuk segalanya dan itu bisa menjadi pilihan yang buruk dalam pengalaman saya.

Saya pikir kombinasi terbaik pasti KEDUA dan saya ingin memuji Anda untuk pendekatan Anda menggunakan mylsql untuk beberapa bagian, seperti pengguna, tetapi gunakan MongoDB untuk bagian lain karena saya merasa bahwa otentikasi dan otorisasi paling baik dilakukan dengan mySQL dan ada banyak contoh dan modul yang melakukan ini dengan sangat baik.

Untuk bagian 'sejumlah besar item', di situlah Anda ingin mempertimbangkan untuk menggunakan mongoDB jika volume Anda tinggi, dan / atau sebagian besar dibaca dan / atau itu data yang tidak terstruktur.

Saya menyarankan agar tidak mendasarkan keputusan Anda pada fleksibilitas skema Mongo yang kurang. SQL dan sql-schemas muncul dari kebutuhan untuk memiliki data terstruktur dan dapat melakukan perhitungan dan transformasi yang hanya mungkin dilakukan dengan struktur seperti itu. Saya belajar ini dari 5 tahun bekerja di peran data warehouse. Saya hanya akan melihat MongoBD untuk masalah kinerja. Jika Anda atau mengharapkan volume tinggi dari pengguna dan permintaan, katakanlah 100.000 pengguna dan 20 permintaan per detik, saya akan menggunakan mongoDB, kalau tidak saya akan mencoba dan tetap menggunakan sql. Dalam banyak kasus saya akan menggunakan mySQL untuk volume rendah, dan kemudian, ketika volume, pendapatan dan infrastruktur mendukungnya, beralih ke Oracle, sebelum mencampur mongoDB. Saya setuju bahwa Anda tidak boleh mencoba untuk mengatasi masalah volume sebelum Anda mengalaminya, namun jika Anda memiliki gagasan yang adil tentang ke mana Anda pergi dan jangan Saya tidak ingin menulis ulang di tengah jalan, jadi masuk akal untuk memilih teknologi yang tepat. Hanya ingat bahwa jika Anda benar-benar memiliki volume tinggi itu ada sejumlah besar opsi dan teknologi di semua tingkat tumpukan yang akan Anda gunakan.

Ada kelemahan pada data yang terstruktur secara longgar. Saya menggunakan analogi tempat parkir di sini. tidak ada garis pemisah yang bagus untuk 3 mobil pertama yang masuk, tetapi karena semakin banyak mobil masuk, banyak kekacauan mulai terjadi dan mencoba untuk diparkir atau dengan mudah menghitung mobil dan menjaga jalur tetap bebas menjadi mimpi buruk. Pengorganisasian ini membutuhkan pekerjaan di depan - menandai garis dan pembagi dan arus lalu lintas, dll. Tetapi terbayar. Kadang-kadang hal berubah tentu saja (mobil menjadi lebih besar) dan Anda harus melakukan beberapa perubahan - mengecat garis. Ditambah lagi down-time standar untuk pengecatan ulang dan pemeliharaan tahunan.

Aspek desain skema mungkin akan menjadi rintangan terbesar bagi pengguna mysql tradisional. Saya pikir halaman MongoDb tentang desain skema membantu dengan itu. Poin terakhir saya adalah bahwa setiap teknologi yang Anda tambahkan ke dalam campuran menambah kompleksitas. Sering ada advokat besar untuk setiap bagian yang akan mengatakan Anda "harus" menggunakannya, tetapi saya telah menemukan bahwa faktor yang sangat besar adalah berapa banyak potongan yang ada. Ini menyiratkan lebih banyak poin kegagalan yang mungkin terjadi dan yang paling penting adalah basis pengetahuan yang dibutuhkan orang lain untuk mengetahui cara mengatasinya.

fyi Rick Obsorne memiliki diagram perbandingan yang cukup luar biasa yang cukup unik!


itu proyek nyata pertama saya di kereta: ini hobi dan untuk saat ini saya tidak tahu apakah itu akan berhasil atau gagal. Tujuan pertama saya di sini adalah untuk mengenal kereta sehingga saya tidak bisa bicara tentang lalu lintas. Bacaan tidak akan menjadi yang utama, saya juga akan memiliki banyak data baru dan memperbaruinya ...
Matteo Pagliazzi

1
hal yang menyenangkan tentang mongodb adalah tidak ada skema tetap, jadi untuk proyek hobi ada lebih sedikit pekerjaan setup. Skema dapat berkembang dari waktu ke waktu dan Anda tidak perlu mengambil langkah ekstra memperbarui tabel SQL.
Kevin

tidak yakin dengan -1 saya atau mengapa 0 saran buruk atau tidak setuju?
Michael Durrant

Lagi pula, jika ini adalah proyek pertama Anda di kereta saya akan tetap menggunakan mySQL. Ada BANYAK yang harus dipelajari di kereta api, jauh lebih dari 1 bulan setelah Anda mulai menarik tirai.
Michael Durrant

@michael lihat pembaruan terakhir saya
Matteo Pagliazzi

3

Saya melihat banyak argumen yang valid di sini untuk NoSQL vs MySQL. Satu tautan yang hilang adalah tentang skala: Jika Anda ingin benar-benar mengukur dan ingin melakukannya dengan basis data internal, Anda akan membutuhkan BANYAK pengetahuan tentang basis data. Ada terlalu banyak kisah horor di luar sana di mana orang gagal dalam mencoba menerapkan sistem yang akan berskala tak terbatas.

Jika Anda benar-benar memilih untuk pergi dengan rute NoSQL (dan siap untuk mengambil biaya yang menyertainya - seperti tidak ada yang bergabung), Pertimbangkan AWS DynamoDB (http://aws.amazon.com/dynamodb/). Di sini Anda bisa melupakan seluruh bagian penskalaan basis data, dan berkonsentrasi pada aplikasi Anda. Semoga berhasil.

Penafian: Saya adalah pengembang di tim AWS DynamoDB, tetapi saya benar-benar percaya pada produk kami. Jangan mencobanya :)


1

Jadi, desain Anda dapat menyimpan ke dalam database Anda dua jenis objek:

  • Objek pengguna (yang selalu bidang).
  • Objek aplikasi (yang dapat memiliki bidang berbeda). Aplikasi hanya akan menjadi milik satu pengguna.

Koleksi dapat atau tidak saya buat sebagai objek yang berbeda, seperti hanya tag untuk mengelompokkan aplikasi yang berbeda. Demi argumen, katakanlah tidak ada koleksi dan pengguna hanya memiliki daftar aplikasi.

Meskipun saya pikir ini dapat dicapai pada MySQL, di MongoDB Anda akan memiliki fleksibilitas yang lebih besar dalam hal struktur objek aplikasi, dan mungkin itu akan memetakan representasi Anda ke dalam basis data secara lebih alami, membuat kode lebih sederhana.

Di MySQL Anda akan mengalami masalah dalam menangani format yang berbeda untuk aplikasi yang berbeda, tetapi itu mungkin. Beberapa ide:

  • Anda dapat membuat tabel perantara dengan semua info umum antara semua objek (id, user_id, judul, dll.), Lalu jenisnya, sehingga Anda dapat mencarinya di tabel lain dengan hanya bidang yang tidak umum untuk format tersebut (mis. nama file dan ukuran file untuk file). Anda harus membuat tabel berbeda untuk setiap format yang berbeda. Jika kedua tabel diindeks oleh app_id (kunci utama), itu akan cukup cepat, karena mengakses tabel dengan nilai yang diindeks cepat.
  • Anda dapat menyandikan data dalam beberapa format dan menyimpan standar. Misalnya, menyandikan data yang tidak umum di JSON sebagai string dan menyimpannya di bidang VARCHAR. Hati-hati dengan ukuran bidang itu sehingga Anda tidak kehabisan ruang. Formatnya bisa kompleks (JSON) atau sederhana (hanya nilai yang dipisahkan oleh koma)
  • Anda dapat membuat bidang "generik" yang berbeda, seperti int1, int2, str1, str2, dan menentukan bahwa str1 untuk jenis aplikasi adalah "file_name" sedangkan untuk jenis yang berbeda dapat berupa "lokasi".

Di MongoDB, bisa sesederhana hanya menggunakan dua koleksi MongoDB, satu untuk pengguna dan satu lagi untuk aplikasi. Dengan asumsi semacam batasan (yang tidak demikian, seperti yang Anda jelaskan, tetapi hanya untuk mengatakan), Anda bahkan dapat menyimpan aplikasi di dalam objek pengguna, sebagai daftar. Menyimpan dan mengambil data lebih alami, karena Anda dapat menyimpan segala jenis objek, apa pun bidangnya. Anda dapat mencari berdasarkan user_id untuk mendapatkan semua aplikasi milik pengguna. Pada MongoDB Anda kehilangan kemungkinan melakukan permintaan bergabung, tetapi dalam hal ini saya pikir pertanyaan dasar akan mengambil pengguna dan mengambil aplikasi yang terkait dengan pengguna. Jika Anda berencana untuk melakukan banyak hal seperti "beri saya pengguna yang memiliki lebih dari dua koleksi dengan masing-masing tiga aplikasi", Anda harus membuatnya bukan sebagai permintaan bergabung, tetapi sebagai proses dalam kode, dan akan kurang alami daripada dalam database relasional dan dapat mengambil lebih banyak waktu untuk diproses. Jika Anda ingin mencari parameter (mis. Berikan saya semua aplikasi milik pengguna tertentu; beri saya semua aplikasi yang bertipe X), itu cukup mudah di MongoDB dan tidak perlu menggunakan gabungan.

Saya tidak yakin tentang dukungan MongoDB on Rails. Saya telah menggunakannya dalam Python dan JavaScript.

EDIT: Menambahkan komentar tentang waktu ketika mengakses dua tabel dan opsi MySQL lainnya


saya tidak suka opsi kedua untuk menggunakan MySQL untuk menyimpan pengaturan opsional karena saya pikir mungkin memuat setiap baris dengan banyak byte yang tidak perlu ... untuk yang kedua: itu akan memperlambat aplikasi saya banyak untuk memuat dua baris dari dua tabel berbeda untuk memuat satu item?
Matteo Pagliazzi

silakan lihat pembaruan terakhir saya
Matteo Pagliazzi

Tentang pertanyaan Anda tentang kecepatan, seharusnya tidak jauh lebih lambat (Anda mengaksesnya melalui nilai unik yang diindeks). Saya juga telah mengedit jawaban saya, karena proposal yang diedit terakhir mirip dengan ide pertama, dan menambahkan opsi lain.
Khelben

1

Saya akan mengatakan menggunakan teknologi yang paling Anda ketahui, terutama jika itu adalah proyek nyata dan Anda ingin mendorongnya dengan cepat. Menggunakan MySQL dan Mongo akan memberikan manfaat dan sakit kepala tersendiri. Setelah bekerja dengan keduanya, saya juga ingin menambahkan bahwa tidak terlalu sulit untuk bermigrasi dari MySQL ke Mongo jika Anda mengikuti prinsip desain yang bagus.

Karena itu, salah satu alasan bagus untuk menggunakan MongoDB dalam kasus Anda adalah data Anda. Seperti yang telah Anda sebutkan, Anda akan memiliki beberapa jenis entri untuk koleksi Anda: peta, video, dan sebagainya. Jika Anda menerapkan ini menggunakan RDBMS, Anda memiliki 3 pendekatan:

  • table-per-type: setiap tabel berisi kolom yang spesifik untuk setiap jenis objek

    Kekurangan : N permintaan untuk mencari di semua tipe data.

    Keuntungan : desain OO bagus, mudah dirawat

  • tabel tunggal: satu tabel besar yang berisi semua atribut yang mungkin untuk semua jenis, dengan sebagian besar dari mereka nol untuk entri tertentu

    Kekurangan : Mengubah ke objek apa pun akan membutuhkan tabel perubahan, menyakitkan begitu tabel menjadi besar. Sulit dipertahankan.

    Keuntungan : Mudah diimplementasikan.

  • tabel inti dengan meta-data: Anda memiliki tabel tunggal dengan atribut inti, katakanlah judul, tanggal, dan tabel metadata dengan pasangan nilai kunci untuk atribut tambahan

    Kekurangan : Dua permintaan untuk mendapatkan semua data untuk satu objek.

    Keuntungan : Sangat fleksibel, tidak terlalu sulit untuk diterapkan.

Saya telah menggunakan masing-masing pendekatan ini sebelumnya, dan saya dapat mengatakan tidak ada yang alami bekerja dengan Mongo. Data Anda mungkin akan terlihat seperti ini:

{_id:"collection1",
 name:"My first Collection",
 owner: "user123243342",
 entries: [
    {type:"video",
     url: "http://www.youtube.com/234324",
     tags: ["roadtrip", "fun", "camera"]
     },
    {type:"map",
     coordinates: [LOC: [38, –102], LOC: [43, –33], LOC: [228, –102]],
     description: "Road trip to nowhere",
 ]
}

Tetapi Anda tidak perlu benar-benar khawatir tentang desain skema, karena objek domain Anda dapat secara langsung dipertahankan. MongoDB pada dasarnya adalah toko objek Anda yang dapat Anda tanyakan.

Memperhatikan saya telah meninggalkan diskusi tentang perbandingan kinerja antara MySql dan Mongodb. Meskipun Anda harus selalu mengingat kinerja, Anda tidak akan dapat membuat keputusan secara efektif kecuali Anda tahu pola akses data. Setiap proyek yang baik mungkin akan melalui beberapa iterasi refactoring saat itu tumbuh dan tantangan baru muncul. Jangan khawatir tentang kinerja sebelum dewasa dan pilih alat yang paling Anda ketahui dan mulai koding.

Edit

Untuk menanggapi pertanyaan spesifik Anda tentang penggunaan MySQL dan menjaga atribut di bidang yang sama menggunakan "|". Jangan lakukan ini. Pendekatan ini akan memberi Anda lebih banyak masalah daripada menyelesaikannya. Pertama-tama, Anda tidak akan dapat menanyakan atribut individual menggunakan MySql. Kedua, ia menambahkan terlalu banyak kerumitan pada lapisan akses data Anda. Gunakan tipe-per-tabel atau pendekatan meta-data sebagai gantinya. Jika Anda pernah bekerja dengan WordPress sebelumnya, ia menggunakan pendekatan meta-data:

  • tabel pengguna + usemeta untuk pengguna
  • post table + post table postmeta

Ini membuat struktur data sangat fleksibel dan masih dapat di-query dengan kecepatan yang wajar.


saya tidak suka opsi metadata ... tapi saya sedang memikirkan tabel tunggal dengan bidang yang dibiarkan nol jika tidak digunakan
Matteo Pagliazzi

Pendekatan tabel tunggal mungkin yang terburuk dari kelompok itu. Meskipun Anda bisa melakukan semuanya dalam satu permintaan, perubahan apa pun untuk tipe data tunggal apa pun akan membutuhkan tabel perubahan. Dan itu adalah rasa sakit di mysql begitu meja Anda menjadi besar.
ltfishie

0

Artikel di bawah ini memberikan hasil yang baik membandingkan MySQL dan MongoDB dalam hal memilih, mengambil dan memasukkan, mengingat jumlah data dalam database dan jumlah data yang diambil. Hasilnya menunjukkan kinerja yang luar biasa untuk MongoDB mengenai "sisipan", tetapi pada kasus lain MySQL menang. Lihat di bawah:

http://www.moredevs.ro/mysql-vs-mongodb-performance-benchmark/

Saya punya pengalaman menggunakan MongoDB yang saya pikir itu solusi yang bagus. Saya menggunakannya untuk memasukkan ribuan koleksi setiap hari. Dikombinasikan dengan solusi Solr (solusi cache, diperbarui sekali per hari), saya dapat mengambil data MongoDB dengan id pengumpulan saat diperlukan, jadi saya tidak perlu memilih dengan cepat. Jadi, mengingat Anda harus berurusan dengan banyak sisipan dan tidak perlu peduli untuk memilih dan mengambil, MongoDB bisa menjadi ide bagus, itu akan tergantung pada setiap kasus dan melakukan analisis yang baik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.