Saya mencari struktur data yang sangat efisien untuk penyimpanan data yang mirip dengan yang berikut ini.
Id Tags Order1 Order2 -------------------------- 1 1,2 1 1 2 2,5 2 3 3 1,7 4 7 4 6 3 0
Saya harus dapat menanyakan struktur ini sedemikian rupa sehingga akan memberi saya daftar semua id yang berisi ekspresi tag - mendukung AND
dan OR
dan NOT
operasi. Misalnya. ((1 atau 2) dan bukan 7)
Saya juga harus dapat menentukan urutan hasil (Order1 atau Order2) dan dapat menentukan baris maksimum yang dikembalikan dengan offset opsional. Kinerja untuk pengambilan 30-100 hasil pertama adalah kuncinya.
Akhirnya, saya membutuhkan cara yang murah untuk mencari "hubungan tag" misalnya saya ingin tahu tag mana yang "berhubungan" dengan tag (1 ATAU 2) dan dalam frekuensi berapa. Berarti tag mana yang muncul dalam set yang sama dengan 1 ATAU 2 ... dipesan berdasarkan frekuensi.
Adakah gagasan tentang struktur data apa (atau sekumpulan struktur) yang sangat efisien untuk jenis pekerjaan ini?
(Saya ingin menggunakan ini sebagai bukti konsep untuk mendesain ulang halaman yang ditandai dari keluarga situs SE)
sumber
Jawaban:
Ini bukan jawaban yang tepat untuk struktur data yang efisien, tetapi lebih merupakan uraian atas komentar @bbejot dan @Kaveh yang memberikan argumen melambaikan tangan untuk alasan mengapa dengan pertanyaan saat ini kita seharusnya tidak mengharapkan sesuatu yang jauh lebih baik daripada mencari di seluruh basis data. Argumen ini didasarkan pada pengurangan dari SAT, hipotesis waktu eksponensial , dan banyak lambaian tangan.
Kami seharusnya tidak mengharapkan pencarian efisien dalam panjang kueri (dengan reduksi menjadi SAT). Kita juga seharusnya tidak berharap jauh lebih baik daripada melihat semua item dalam database dengan hipotesis waktu eksponensial.
sumber
Ini adalah jawaban yang cukup mudah, tetapi saya pikir efektif:
Map Tag ([Id],[Id])
Map Id (Set Tag)
Id
sumber