Salah satu kemungkinannya adalah menyimpan semua varian yang menurut Anda mungkin berguna sebagai elemen array — meskipun tidak yakin apakah itu mungkin!
{
"number" : "pl",
"surface_form" : "skrejjen",
"surface_forms: [ "skrej", "skre" ],
"phonetic" : "'skrɛjjɛn",
"pattern" : "CCCVCCVC"
}
Saya mungkin juga menyarankan untuk tidak menyimpan 1000 bentuk kata dengan setiap kata, tetapi balikkan ini untuk memiliki dokumen yang lebih kecil. Semakin kecil dokumen Anda, semakin sedikit MongoDB yang harus membaca ke dalam memori untuk setiap pencarian (tentu saja selama kondisi pencarian tidak memerlukan pemindaian penuh):
{
"word": {
"pos" : "N",
"lemma" : "skrun",
"gloss" : "screw",
},
"form" : {
"number" : "sg",
"surface_form" : "skrun",
"phonetic" : "ˈskruːn",
"gender" : "m"
},
"source" : "Mayer2013"
}
{
"word": {
"pos" : "N",
"lemma" : "skrun",
"gloss" : "screw",
},
"form" : {
"number" : "pl",
"surface_form" : "skrejjen",
"phonetic" : "'skrɛjjɛn",
"pattern" : "CCCVCCVC"
},
"source" : "Mayer2013"
}
Saya juga ragu bahwa MySQL akan berkinerja lebih baik di sini dengan mencari bentuk kata acak karena harus melakukan pemindaian tabel penuh seperti halnya MongoDB. Satu-satunya hal yang dapat membantu adalah cache kueri - tetapi itu adalah sesuatu yang dapat Anda bangun di UI/API penelusuran di aplikasi Anda dengan cukup mudah tentunya.