Pertanyaan Kueri lanjutan di HBase


Mengingat skenario skema HBase berikut (dari FAQ resmi) ...

Bagaimana Anda mendesain tabel Hbase   untuk banyak-ke-banyak hubungan antara   dua entitas, misalnya Siswa dan   Tentu saja

Saya akan mendefinisikan dua tabel:

Siswa: data siswa id siswa   (nama, alamat, ...) kursus (digunakan   ID saja sebagai kualifikasi kolom di sini)

Kursus: tentu saja data mata kuliah id (nama,   silabus, ...) siswa (gunakan siswa   id sebagai kualifikasi kolom di sini)

Skema ini memberi Anda akses cepat ke   kueri, tunjukkan semua kelas untuk a   siswa (tabel siswa, kursus   keluarga), atau semua siswa untuk kelas   (Meja kursus, keluarga siswa).

Bagaimana Anda akan memenuhi permintaan: "Beri aku semua siswa yang berbagi setidaknya dua kursus yang sama"? Dapatkah Anda membangun" query "di HBase yang akan mengembalikan set, atau apakah Anda harus mengambil semua data yang bersangkutan dan crunch sendiri dalam kode?


8
2017-09-16 23:50


asal


Jawaban:


Kueri seperti yang dijelaskan lebih sesuai untuk basis data relasional. Anda dapat menjawab pertanyaan dengan cepat, bagaimanapun, dengan precomputing hasilnya. Misalnya, Anda mungkin memiliki tabel di mana kuncinya adalah jumlah kelas yang sama, dan sel-sel adalah siswa individual yang memiliki banyak kelas kunci yang sama.

Anda dapat menggunakan varian ini untuk menjawab pertanyaan seperti "siswa mana di kelas X dan kelas Y": gunakan kelas sebagai bagian dari kunci (dalam urutan abjad, atau sesuatu yang setidaknya konsisten), dan lagi, setiap kolom adalah mahasiswa.


3
2017-10-01 20:08



Jenis query ini tidak tersedia melalui 0.20.0 API. Saya tidak yakin apakah ada rencana untuk itu (saya ragu itu akan muncul dalam waktu dekat). Anda akan menemukan beberapa rincian peta jalan di situs web HBase itu mungkin jawab pertanyaan itu.

Anda harus menghitung jawabannya dalam aplikasi Anda sendiri (meskipun saya ingin terbukti salah).


2
2017-09-22 01:01



Gunakan filer untuk mencapai ini.

SingleValueFiler filer = SingleValueFiler baru (dan argumen Anda berdasarkan pada api);

tambahkan ini ke Scan (org.apache.hadoop.hbase.client.Scan scan = new Scan ();                    scan.setFiler (filter);


1
2018-05-05 14:20



Sepertinya MapReduce bisa menjadi salah satu cara untuk menyelesaikan ini; sayangnya itu tidak akan memberikan hasil instan jika dilakukan dengan cepat. Hanya dengan memikirkannya Anda bisa, di fase peta, hitung berapa kali sepasang siswa berakhir di kelas yang sama. Selama fase reduksi Anda dapat menjumlahkan pasangan dan menulis (memancarkan) pasangan yang memiliki jumlah 2 atau lebih. Pendekatan ini dapat digunakan untuk pra-menghasilkan indeks (seperti yang disarankan sebelumnya) yang menunjukkan pasangan siswa dengan program "x" yang sama. Kunci untuk indeks semacam itu bisa menjadi sesuatu di sepanjang garis "X / Student1_Key / Student2_Key", di mana X adalah jumlah program yang mereka miliki bersama dan. Pemindaian rentang indeks (mis., X> = 2) akan memberi Anda jawaban Anda. Mengingat integrasi asli HBase dengan MapReduce solusi sepanjang garis-garis ini harus mudah.

Juga, mengikuti model BigTable, Anda bahkan tidak perlu membuat dua tabel. Hanya mendahului setiap kunci rekaman dengan "jenis" seperti Kursus: atau Siswa :. Karena baris-baris tersebut diurutkan secara leksikografis, mereka mudah dipindai berdasarkan jenisnya. Mengisi (atau menghasilkan) kolom yang dibutuhkan untuk mendukung properti untuk setiap jenis. Karena HBase mendukung tabel yang sangat jarang, ini berfungsi dengan baik. Lihat presentasi luar biasa ini tentang memilih kunci dan mengembangkan indeks dengan BigTable: http://www.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html. Presentasi ini sangat membantu saya memahami cara menyimpan berbagai hal dalam basis data seperti HBase untuk pengambilan yang efisien.

Tetapi kembali ke pertanyaan awal, tampaknya ketika bekerja dengan HBase Anda benar-benar harus tahu bagaimana data Anda akan digunakan sehingga indeks yang sesuai dapat dikembangkan terlebih dahulu untuk mendapatkan jawaban cepat. Tampaknya kueri ad-hoc acak akan selalu berhasil dengan model ini.

Bagaimanapun, saya juga baru dalam hal ini sehingga melihat masalah seperti ini dan solusi yang mungkin membantu!


1
2017-10-22 00:28