Praktik yang baik untuk mengembalikan data dalam jumlah besar di node.js

Saya sudah membuat kode server web menggunakan Koa (nodeJs). Saya perlu mengembalikan sejumlah besar data dari database mongo. Besar berarti kumpulan sekitar 750.000 data json. Setiap elemen json berisi beberapa string.

Apa cara yang baik untuk mengkodekan server seperti itu agar tidak crash? Saya terbuka untuk semua tip :)

PS: Klien saya adalah Unity (c# atau js).


person MrFlo    schedule 24.04.2017    source sumber
comment
kenapa kamu harus kembali sekaligus? hal pertama yang terlintas dalam pikiran adalah gzip. Jika masih belum cukup kecil, gunakan jenis kompresi lain untuk membantu menurunkannya. Tapi sejujurnya, saya akan mencoba mencari tahu mengapa klien membutuhkan semua data tersebut sekaligus.   -  person Tuan Anh Tran    schedule 24.04.2017
comment
Saya membuat vizualisasi data, dan saya ingin memvisualisasikan semuanya dalam satu kesempatan. Namun saya dapat memuatnya berdasarkan paket.   -  person MrFlo    schedule 24.04.2017
comment
Jika demikian, Anda mungkin ingin memproses/menggabungkan data di sisi server juga untuk mengirim lebih sedikit data.   -  person Gabriel Littman    schedule 27.04.2017
comment
Dalam kebanyakan kasus, Anda benar, tetapi dalam kasus saya, saya memerlukan seluruh kumpulan data saya   -  person MrFlo    schedule 27.04.2017


Jawaban (2)


Node menggunakan pengkodean transfer terpotong untuk HTTP secara default dan menggunakan aliran Anda dapat mengembalikan data berukuran petabyte dalam satu permintaan tanpa masalah, setidaknya tanpa masalah ke server - meminta klien untuk mengurai data tersebut adalah cerita lain.

Masalahnya adalah dengan membuat serial data besar ke JSON yang biasanya merupakan operasi pemblokiran yang membutuhkan semua data di memori. Namun ada encoder streaming JSON yang tersedia.

Misalnya, lihat JSON Big-Friendly - fungsi streaming asinkron untuk kumpulan data JSON berukuran besar:

Lihat juga modul lainnya:

Selain itu, Anda tidak perlu mengirim satu JSON berukuran besar, Anda dapat membaginya menjadi beberapa objek. Dan Anda tidak perlu menggunakan JSON untuk membuat serial data. Anda dapat menggunakan CSV, TSV, atau apa pun yang sesuai dengan data Anda. Anda tidak memberi tahu kami apa pun tentang data Anda sehingga sulit untuk memberikan rekomendasi spesifik.

person rsp    schedule 24.04.2017
comment
terima kasih atas rekomendasi Anda. Saya menggunakan mongodb, jadi menyimpan data di json. Bukan alasan spesifik kecuali lebih mudah untuk dikelola bagi saya (yang merupakan alasan BURUK). Saya akan memeriksa modul Anda, sekali lagi terima kasih. - person MrFlo; 24.04.2017

Karena datanya sangat besar, apakah Anda sebenarnya menginginkan semuanya ada di klien sekaligus? Jika tidak, opsi sederhana lainnya adalah memberi nomor halaman pada data melalui beberapa permintaan.

Kueri mongo dapat dengan mudah dibuang dengan opsi batasi dan lewati ke permintaan pencarian.

Anda dapat meneruskannya menggunakan parameter kueri http://example.com/large_data?skip=5000&limit=1000.

person Gabriel Littman    schedule 27.04.2017
comment
saran yang bagus! itulah sintaksis yang saya cari! terima kasih banyak ! - person MrFlo; 27.04.2017