ਇੱਕ ਵੀਡੀਓ-ਹੋਸਟਿੰਗ ਸੇਵਾ ਦੇ ਪਿੱਛੇ ਕੰਮ ਕਰਦੀ ਇੰਜੀਨੀਅਰਿੰਗ ਟੀਮ ਨੇ ਆਪਣੇ SQLite FTS5 ਇੰਡੈਕਸ ਨੂੰ OpenSearch ਕਲੱਸਟਰ ਨਾਲ ਬਦਲ ਦਿੱਤਾ, ਜਿਸ ਨਾਲ ਜ਼ੀਰੋ-ਰਿਜ਼ਲਟ (zero-result) ਕੁਏਰੀਆਂ 12 % ਤੋਂ ਘਟ ਕੇ 1.4 % ਰਹਿ ਗਈਆਂ ਅਤੇ ਲੇਟੈਂਸੀ (latency) ਨੂੰ 28 ms ਤੋਂ ਘੱਟ ਰੱਖਦੇ ਹੋਏ ਸਰਚ-ਟੂ-ਕਲਿੱਕ ਰੇਟ ਵਿੱਚ 9 % ਦਾ ਵਾਧਾ ਹੋਇਆ।
ਇਹ ਤਬਦੀਲੀ ਕਿਉਂ ਜ਼ਰੂਰੀ ਹੋ ਗਈ
SQLite ਦਾ ਫੁੱਲ-ਟੈਕਸਟ ਸਰਚ ਐਕਸਟੈਂਸ਼ਨ (FTS5) ਆਕਰਸ਼ਕ ਹੈ: ਇਹ ਬਾਕੀ ਡੇਟਾ ਵਾਂਗ ਇੱਕੋ ਫਾਈਲ ਵਿੱਚ ਰਹਿੰਦਾ ਹੈ, ਇਸਦੀ ਕੋਈ ਲਾਇਸੈਂਸਿੰਗ ਲਾਗਤ ਨਹੀਂ ਹੈ, ਅਤੇ ਸਹੀ ਟੋਕਨ ਮੈਚਾਂ ਲਈ ਤੁਰੰਤ ਨਤੀਜੇ ਦਿੰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਪਲੇਟਫਾਰਮ ਦੇ ਲੌਗਸ (logs) ਤੋਂ ਪਤਾ ਲੱਗਾ ਕਿ ਯੂਜ਼ਰਾਂ ਦੀਆਂ ਬਹੁਤ ਸਾਰੀਆਂ ਸਰਚਾਂ ਦਾ ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਨਿਕਲ ਰਿਹਾ ਸੀ। "intersteller" ਜਾਂ "avengrs endgame" ਵਰਗੀਆਂ ਗਲਤ ਸਪੈਲਿੰਗਾਂ (misspellings) – ਜੋ ਕਿ ਮੋਬਾਈਲ ਕੀਬੋਰਡਾਂ 'ਤੇ ਲੋਕ ਅਕਸਰ ਕਰਦੇ ਹਨ – ਇਸਦਾ ਮੁੱਖ ਕਾਰਨ ਸਨ।
ਟ੍ਰਾਈਗ੍ਰਾਮਸ (trigrams - ਤਿੰਨ-ਅੱਖਰਾਂ ਦੇ ਟੁਕੜੇ) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਤੇਜ਼ ਹੱਲ (hack) ਨਾਲ ਖਾਲੀ-ਸਰਚ ਰੇਟ ਘਟ ਕੇ 7 % ਤਾਂ ਹੋ ਗਿਆ, ਪਰ ਇਸ ਨਾਲ ਦੋ ਸਮੱਸਿਆਵਾਂ ਪੈਦਾ ਹੋ ਗਈਆਂ। ਪਹਿਲੀ, ਇੰਡੈਕਸ ਆਪਣੇ ਅਸਲ ਆਕਾਰ ਤੋਂ ਤਿੰਨ ਗੁਣਾ ਤੋਂ ਵੱਧ ਵੱਡਾ ਹੋ ਗਿਆ, ਜਿਸ ਨਾਲ ਸਟੋਰੇਜ ਲਾਗਤ ਵਧ ਗਈ ਅਤੇ ਅੱਪਡੇਟ ਹੋਣ ਦੀ ਰਫ਼ਤਾਰ ਹੌਲੀ ਹੋ ਗਈ। ਦੂਜੀ, ਰੈਲੇਵੈਂਸ (relevance) ਪ੍ਰਭਾਵਿਤ ਹੋਈ; ਫਜ਼ੀ ਮੈਚਿੰਗ (fuzzy matching) ਨੇ ਗੈਰ-ਸੰਬੰਧਿਤ ਵੀਡੀਓਜ਼ ਦਾ ਇੱਕ ਅਜੀਬ ਮਿਸ਼ਰਣ ਦਿਖਾਉਣਾ ਸ਼ੁਰੂ ਕਰ ਦਿੱਤਾ, ਜਿਸ ਨਾਲ ਯੂਜ਼ਰਾਂ ਨੂੰ ਮਾਰਗਦਰਸ਼ਨ ਕਰਨ ਦੀ ਬਜਾਏ ਉਹ ਉਲਝਣ ਵਿੱਚ ਪੈ ਗਏ।
ਟੀਮ ਨੇ ਇਹ ਸਿੱਟਾ ਕੱਢਿਆ ਕਿ ਇੱਕ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਬਣਾਏ ਗਏ ਸਰਚ ਇੰਜਣ ਦੀ ਲੋੜ ਹੈ, ਜਿਸ ਵਿੱਚ ਕੁਦਰਤੀ ਤੌਰ 'ਤੇ ਟਾਈਪੋ-ਟੋਲਰੈਂਸ (typo-tolerance) ਅਤੇ ਉੱਨਤ ਰੈਲੇਵੈਂਸ ਸਕੋਰਿੰਗ ਹੋਵੇ।
OpenSearch ਪਾਈਪਲਾਈਨ ਬਣਾਉਣਾ
SQLite ਨੂੰ 'ਸੋਰਸ ਆਫ ਟਰੂਥ' (source of truth) ਵਜੋਂ ਰੱਖੋ
OpenSearch ਇੱਕ ਡਿਸਪੋਜ਼ੇਬਲ (disposable), ਰੀਡ-ਓਨਲੀ ਰੈਪਲੀਕਾ ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਸੀ। ਸਾਰਾ ਵੀਡੀਓ ਮੈਟਾਡਾਟਾ SQLite ਵਿੱਚ ਹੀ ਰਿਹਾ; ਸਰਚ ਇੰਡੈਕਸ ਨੂੰ ਡੇਟਾ ਗੁਆਉਣ ਦੇ ਡਰ ਤੋਂ ਬਿਨਾਂ ਦੁਬਾਰਾ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਸੀ। ਜਦੋਂ ਵੀ OpenSearch ਕਲੱਸਟਰ ਡਾਊਨ ਹੁੰਦਾ, ਐਪਲੀਕੇਸ਼ਨ ਆਪਣੇ ਆਪ ਅਸਲ FTS5 ਇੰਜਣ 'ਤੇ ਵਾਪਸ ਆ ਜਾਂਦੀ ਸੀ।
"should" ਕੁਏਰੀ ਨਾਲ ਲੇਅਰਡ ਰੈਲੇਵੈਂਸ
ਸਿਰਫ਼ ਫਜ਼ੀ ਮੈਚਿੰਗ 'ਤੇ ਨਿਰਭਰ ਰਹਿਣ ਦੀ ਬਜਾਏ, ਕੁਏਰੀ ਵਿੱਚ ਤਿੰਨ ਕਲਾਜ਼ਾਂ (clauses) ਨੂੰ ਜੋੜਿਆ ਗਿਆ:
- Exact phrase match – ਸਭ ਤੋਂ ਵੱਧ ਬੂਸਟ (boost), ਉਹਨਾਂ ਯੂਜ਼ਰਾਂ ਨੂੰ ਇਨਾਮ ਦਿੰਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਨੇ ਸਿਰਲੇਖ ਸਹੀ ਤਰ੍ਹਾਂ ਟਾਈਪ ਕੀਤਾ ਹੈ।
- All terms present – ਮੱਧਮ ਬੂਸਟ, ਉਹਨਾਂ ਕੁਏਰੀਆਂ ਨੂੰ ਫੜਦਾ ਹੈ ਜਿੱਥੇ ਹਰ ਸ਼ਬਦ ਮੌਜੂਦ ਹੁੰਦਾ ਹੈ ਪਰ ਜ਼ਰੂਰੀ ਨਹੀਂ ਕਿ ਉਹ ਸਹੀ ਕ੍ਰਮ ਵਿੱਚ ਹੋਵੇ।
- Fuzzy match – ਘੱਟ ਬੂਸਟ, ਗਲਤ ਸਪੈਲਿੰਗ ਵਾਲੇ ਟੋਕਨਾਂ ਲਈ ਇੱਕ ਸੁਰੱਖਿਆ ਜਾਲ ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਹੈ।
ਇਸ ਲੜੀਵਾਰ ਢਾਂਚੇ ਨੇ ਸਾਫ਼ ਕੁਏਰੀਆਂ ਲਈ ਸ਼ੁੱਧਤਾ (precision) ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਿਆ ਅਤੇ ਨਾਲ ਹੀ ਟਾਈਪੋਜ਼ ਲਈ ਇੱਕ ਸਹਿਯੋਗੀ ਬਦਲ (fallback) ਵੀ ਪ੍ਰਦਾਨ ਕੀਤਾ।
ਫਜ਼ੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਟਿਊਨ ਕਰਨਾ
1 ਦੀ ਪ੍ਰੀਫਿਕਸ ਲੈਂਥ (prefix length) ਨੇ ਇਹ ਲਾਜ਼ਮੀ ਕਰ ਦਿੱਤਾ ਕਿ ਫਜ਼ੀ ਲੌਜਿਕ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਹਰੇਕ ਸ਼ਬਦ ਦਾ ਪਹਿਲਾ ਅੱਖਰ ਮੈਚ ਹੋਵੇ। ਇਸ ਨਿਯਮ ਨੇ ਸਰਚ ਨੂੰ ਤੇਜ਼ ਰੱਖਿਆ ਅਤੇ ਉਮੀਦਵਾਰ ਸ਼ਬਦਾਂ ਦੀ ਅਜਿਹੀ ਭਰਮਾਰ ਨੂੰ ਰੋਕਿਆ ਜੋ ਮੈਮੋਰੀ 'ਤੇ ਬੋਝ ਪਾ ਸਕਦੇ ਹਨ। ਟੀਮ ਨੇ ਸ਼ਬਦਾਂ ਦੇ ਵਾਧੇ (term expansions) ਦੀ ਵੱਧ ਤੋਂ ਵੱਧ ਗਿਣਤੀ ਨੂੰ ਵੀ ਸੀਮਤ ਕੀਤਾ, ਜੋ ਕਿ ਸਰੋਤਾਂ ਦੀ ਬੇਕਾਬੂ ਵਰਤੋਂ ਵਿਰੁੱਧ ਇੱਕ ਹੋਰ ਸੁਰੱਖਿਆ ਪ੍ਰਬੰਧ ਸੀ।
ਸਿੰਕ੍ਰੋਨਾਈਜ਼ੇਸ਼ਨ ਰਣਨੀਤੀ
ਤਿੰਨ ਪੂਰਕ ਪ੍ਰਕਿਰਿਆਵਾਂ OpenSearch ਇੰਡੈਕਸ ਨੂੰ SQLite ਦੇ ਨਾਲ ਅਨੁਕੂਲ ਰੱਖਦੀਆਂ ਹਨ:
- ਨਵੇਂ ਡੇਟਾ ਨੂੰ ਸਿੰਕ ਕਰਨ ਲਈ ਇੱਕ ਕਰੌਨ ਜੌਬ (cron job)।
- ਨਾਈਟਲੀ ਡਿਫ ਪਾਸ (Nightly diff pass) – ਉਹਨਾਂ ਗਲਤੀਆਂ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ ਜੋ ਇੰਕਰੀਮੈਂਟਲ ਅੱਪਡੇਟਸ ਦੌਰਾਨ ਰਹਿ ਗਈਆਂ ਸਨ।
- ਰੋਜ਼ਾਨਾ ਪੂਰਾ ਰੀਬਿਲਡ (Weekly full rebuild) – ਇੱਕ ਇੰਡੈਕਸ ਐਲੀਅਸ (index alias) ਦੇ ਪਿੱਛੇ ਚੱਲਦਾ ਹੈ, ਫਿਰ ਇੱਕੋ ਵਾਰ ਵਿੱਚ ਐਲੀਅਸ ਨੂੰ ਬਦਲ ਦਿੰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਜ਼ੀਰੋ ਡਾਊਨਟਾਈਮ (zero downtime) ਦੀ ਗਾਰੰਟੀ ਮਿਲਦੀ ਹੈ।
ਦੋ ਹਫ਼ਤਿਆਂ ਬਾਅਦ ਮਾਪਣਯੋਗ ਪ੍ਰਭਾਵ
- ਜ਼ੀਰੋ-ਰਿਜ਼ਲਟ ਕੁਏਰੀਆਂ 12 % ਤੋਂ ਘਟ ਕੇ 1.4 % ਰਹਿ ਗਈਆਂ।
- ਸਰਚ-ਟੂ-ਕਲਿੱਕ ਕਨਵਰਜ਼ਨ ਵਿੱਚ 9 % ਦਾ ਵਾਧਾ ਹੋਇਆ।
- ਮੀਡੀਅਨ ਲੇਟੈਂਸੀ (Median latency) 28 ms ਤੋਂ ਘੱਟ ਰਹੀ, ਜੋ ਕਿ ਪਲੇਟਫਾਰਮ ਦੇ ਯੂਜ਼ਰ-ਐਕਸਪੀਰੀਅੰਸ ਟਾਰਗੇਟ ਦੇ ਅੰਦਰ ਹੈ।
ਸਾਵਧਾਨੀਆਂ ਅਤੇ ਵਿਰੋਧੀ ਨੁਕਤੇ
ਇਹ ਮਾਈਗ੍ਰੇਸ਼ਨ ਕੋਈ "ਪਲੱਗ-ਐਂਡ-ਪਲੇ" (plug-and-play) ਅੱਪਗ੍ਰੇਡ ਨਹੀਂ ਹੈ। ਟੀਮ ਇਸ ਗੱਲ 'ਤੇ ਜ਼ੋਰ ਦਿੰਦੀ ਹੈ ਕਿ ਪ੍ਰਾਇਮਰੀ ਡੇਟਾਬੇਸ ਨੂੰ ਕਦੇ ਵੀ ਸਰਚ ਇੰਜਣ ਨਾਲ ਨਹੀਂ ਬਦਲਣਾ ਚਾਹੀਦਾ; SQLite ਸਾਰੇ ਵੀਡੀਓ ਮੈਟਾਡਾਟਾ ਲਈ ਅਧਿਕਾਰਤ ਸਟੋਰ (authoritative store) ਬਣਿਆ ਰਹੇਗਾ।
ਨਿਚੋੜ
ਇੱਕ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਬਣਾਏ ਗਏ ਸਰਚ ਇੰਜਣ ਰਾਹੀਂ ਟਾਈਪੋ ਟੋਲਰੈਂਸ ਜੋੜਨ ਨਾਲ ਯੂਜ਼ਰ ਦੇ ਸਫ਼ਰ ਵਿੱਚ ਆ ਰਹੀ ਇੱਕ ਵੱਡੀ ਰੁਕਾਵਟ ਨੂੰ ਇੱਕ ਸੁਚਾਰੂ ਅਤੇ ਤੇਜ਼ ਅਨੁਭਵ ਵਿੱਚ ਬਦਲ ਦਿੱਤਾ ਗਿਆ। ਇਹ ਕੇਸ ਸਟੱਡੀ ਦਿਖਾਉਂਦੀ ਹੈ ਕਿ ਇੱਕ ਅਨੁਸ਼ਾਸਿਤ ਆਰਕੀਟੈਕਚਰ – ਜਿਸ ਵਿੱਚ ਰਿਲੇਸ਼ਨਲ ਸਟੋਰ ਨੂੰ ਸੋਰਸ ਆਫ ਟਰੂਥ ਵਜੋਂ ਰੱਖਿਆ ਜਾਵੇ, ਰੈਲੇਵੈਂਸ ਦੀਆਂ ਲੇਅਰਾਂ ਬਣਾਈਆਂ ਜਾਣ, ਅਤੇ ਫਜ਼ੀ ਲੌਜਿਕ ਦੀ ਸੁਰੱਖਿਆ ਕੀਤੀ ਜਾਵੇ – ਸਥਿਰਤਾ ਨਾਲ ਸਮਝੌਤਾ ਕੀਤੇ ਬਿਨਾਂ ਮਾਪਣਯੋਗ ਲਾਭ ਪ੍ਰਦਾਨ ਕਰ ਸਕਦਾ ਹੈ।