Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cari tahu kata-kata paling populer di MySQL / PHP

Pendekatan termudah yang saya kira adalah:

  • Buat dua tabel baru:keywords (id, kata) dan keywords_comments (keyword_id, comment_id, count)
    • keywords menyimpan id unik dan kata kunci yang Anda temukan dalam teks
    • keywords_comments menyimpan satu baris untuk setiap koneksi antara setiap komentar yang berisi kata kunci tersebut. Dalam count Anda akan menyimpan berapa kali kata kunci ini muncul di komentar. Dua kolom keyword_id + comment_id bersama-sama membentuk kunci utama yang unik atau langsung.
  • Ambil semua komentar dari database
  • Uraikan semua komentar dan pisahkan dengan non-karakter (atau batas lainnya)
  • Tulis entri ini ke tabel Anda

Contoh

Anda memiliki dua komentar berikut:

Sekarang Anda akan mengulangi keduanya dan membaginya dengan non-karakter. Ini akan menghasilkan kata-kata kecil berikut untuk setiap teks:- Teks pertama:hello, how, are, you- Teks kedua:wow, hello, my, name, is, stefan

Segera setelah Anda menguraikan salah satu teks ini, Anda sudah dapat memasukkannya ke dalam database lagi. Saya kira Anda tidak ingin memuat 100.000 komentar ke RAM.

Jadi begini:

  • Parsing teks pertama dan dapatkan kata kunci di atas
  • Tuliskan setiap kata kunci ke dalam tab keywords jika belum ada
  • Tetapkan referensi dari kata kunci ke komentar (keywords_comments ) dan atur hitungannya dengan benar (dalam contoh kita, setiap kata hanya muncul sekali dalam setiap teks, Anda harus menghitungnya).
  • Mengurai teks kedua

Peningkatan kecil

Peningkatan yang sangat mudah yang mungkin harus Anda gunakan untuk 100.000 komentar, adalah dengan menggunakan variabel penghitung atau tambahkan bidang baru telah_dianalisis untuk setiap komentar. Kemudian Anda dapat membacanya komentar demi komentar dari database.

Saya biasanya menggunakan menghitung variabel ketika saya membaca data chunkwise dan tahu bahwa data tidak dapat berubah dari arah saya mulai (yaitu akan tetap konsisten sampai titik saya saat ini). Lalu saya melakukan sesuatu seperti:

SELECT * FROM table ORDER BY created ASC LIMIT 0, 100
SELECT * FROM table ORDER BY created ASC LIMIT 100, 100
SELECT * FROM table ORDER BY created ASC LIMIT 200, 100
…

Pertimbangkan bahwa ini hanya berfungsi jika kita tahu pasti bahwa tidak ada tanggal untuk ditambahkan di tempat yang kita pikir sudah kita baca. Misalnya. menggunakan DESC tidak akan berfungsi, karena mungkin ada data yang dimasukkan. Kemudian seluruh offset akan rusak dan kami akan membaca satu artikel dua kali dan tidak pernah membaca artikel baru.

Jika Anda tidak dapat memastikan bahwa variabel penghitungan luar tetap konsisten, Anda dapat menambahkan bidang baru dianalisis yang Anda setel ke true segera setelah Anda membaca komentar. Kemudian Anda selalu dapat melihat komentar mana yang sudah dibaca dan mana yang belum. Kueri SQL kemudian akan terlihat seperti ini:

SELECT * FROM table WHERE analyzed = 0 LIMIT 100 /* Reading chunks of 100 */

Ini berfungsi selama Anda tidak memparalelkan beban kerja (dengan banyak klien atau utas). Jika tidak, Anda harus memastikan bahwa pembacaan + pengaturan benar adalah atomar (disinkronkan).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Secara otomatis mengatur peningkatan otomatis mysql ke nilai min

  2. mysql Memilih dari dua tabel yang berbeda.

  3. Kinerja RegEx vs LIKE dalam kueri MySql

  4. MySQL memilih baris di mana gabungan kiri adalah nol

  5. Keluarkan daftar catatan MySQL, dikelompokkan berdasarkan kategori?