Saya mencoba mengembangkan aplikasi web di mesin aplikasi Google menggunakan webapp2.
Salah satu hal yang perlu saya lakukan adalah mengambil secara acak dari ndb dan menampilkannya. Apakah ada metode efektif yang memungkinkan saya melakukannya?
Saya mencoba mengembangkan aplikasi web di mesin aplikasi Google menggunakan webapp2.
Salah satu hal yang perlu saya lakukan adalah mengambil secara acak dari ndb dan menampilkannya. Apakah ada metode efektif yang memungkinkan saya melakukannya?
Saya berasumsi yang Anda maksud adalah catatan acak ketika Anda mengatakan "acak dari ndb".
Jika Anda menggunakan id otomatis, Anda dapat menggunakan pendekatan berikut. (seberapa jarang id Anda akan mempengaruhi seberapa sukses hal ini).
gunakan random.randrange(start, stop)
dengan start menjadi 0, stop menjadi (2^52)-1 , mengingat kebijakan alokasi id yang baru.
lakukan kueri hanya kunci untuk kunci yang lebih besar dari kunci yang dibuat dari id acak. jika tidak ada hasil coba buat kunci ‹ kunci dibuat.
ambil 10 (atau sejumlah) kunci
lakukan pilihan acak random.choice(seq)
pada urutan kunci yang dikembalikan dari pengambilan sebelumnya.
key.get() catatan yang dipilih.
Alternatif untuk sejumlah kecil entitas katakanlah ‹ 1000
lakukan kueri hanya kunci dan periksa semua kunci, lalu lakukan random.choice()
pada daftar kunci dan a db.get() pada kunci yang dipilih. Ini akan jauh lebih cepat daripada solusi perulangan apa pun. Jika Anda sering melakukan ini dan kumpulan entitas yang dipilih tidak sering berubah dan daftar kunci berukuran kurang dari 1 MB, Anda dapat menyimpan kunci dalam cache di memcache.
keys = Model.query().fetch(keys_only=True)
2. ambil kunci acak key = random.sample(keys, 1)[0]
3. ambil entitas: return key.get()
. tentu saja hal ini dapat dengan mudah diperluas untuk mendukung berbagai entitas.
- person gru; 30.01.2014
Ada properti khusus sebar. Saya tidak tahu banyak tentangnya, tapi disebutkan dalam implementasi peta/pengurangan.
__scatter__
. ndb tidak mengizinkan pengambilan properti AFAIK yang sebenarnya. Jadi hasilnya akan selalu sama. Tidak ada keacakan di dalamnya.
- person yaswanth; 27.08.2019
Jika jumlah entitas di penyimpanan data Anda tidak terlalu banyak, Anda dapat menggunakan pendekatan di bawah ini: 1, Gunakan yourquery = entitykind.query()
untuk mengambil semua entitas
2, Gunakan yourquery.count()
untuk mendapatkan jumlah entitas
3, Gunakan generator nomor acak untuk membuat nomor acak dalam nilai hitungan di atas
4, Gunakan perulangan for untuk mengulangi entitas yang dikembalikan
permintaan Anda.fetch()
dan kemudian ketika berapa kali loop dieksekusi sama dengan angka acak di atas, gunakan entitas tertentu di aplikasi web Anda