LanceDB ਨੇ pgvector ਦੇ ਮੁਕਾਬਲੇ 100k OpenAI embeddings ਨੂੰ 22 ਗੁਣਾ ਤੇਜ਼ੀ ਨਾਲ ਲੋਡ ਕੀਤਾ, ਜਦੋਂ ਕਿ pgvector ਨੇ ਅੱਠ ਸਮਾਨਾਂਤਰ (simultaneous) ਕਲਾਇੰਟਾਂ ਤੋਂ ਇੱਕੋ ਜਿਹੀ ਵਰਕਲੋਡ ਦਾ ਜਵਾਬ 1.8 ਗੁਣਾ ਤੇਜ਼ੀ ਨਾਲ ਦਿੱਤਾ। ਸਿੰਗਲ-ਥ੍ਰੈਡ ਲੇਟੈਂਸੀ (single-thread latency) ਅਤੇ ਸਟੋਰੇਜ ਕੁਸ਼ਲਤਾ ਵਿੱਚ ਅੰਤਰ ਵੀ LanceDB ਦੇ ਪੱਖ ਵਿੱਚ ਰਿਹਾ, ਜੋ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਵੈਕਟਰ ਸਟੋਰ ਚੁਣਨ ਲਈ ਇੱਕ ਡੇਟਾ-ਡ੍ਰਿਵਨ ਤਰੀਕਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
ਹੁਣ ਬੈਂਚਮਾਰਕ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਹੈ
ਵੈਕਟਰ ਸਰਚ ਹੁਣ ਰਿਸਰਚ ਲੈਬਾਂ ਤੋਂ ਨਿਕਲ ਕੇ ਪ੍ਰੋਡਕਸ਼ਨ ਸਰਵਿਸਿਜ਼ ਜਿਵੇਂ ਕਿ ਰੈਕੋਮੈਂਡੇਸ਼ਨ ਇੰਜਣਾਂ ਅਤੇ ਰਿਟ੍ਰੀਵਲ-ਔਗਮੈਂਟਡ ਜਨਰੇਸ਼ਨ (RAG) ਤੱਕ ਪਹੁੰਚ ਗਈ ਹੈ। ਜ਼ਿਆਦਾਤਰ ਟੀਮਾਂ ਪਹਿਲਾਂ ਹੀ PostgreSQL ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀਆਂ ਹਨ, ਇਸ ਲਈ pgvector ਐਕਸਟੈਂਸ਼ਨ ਨਵੇਂ ਇਨਫਰਾਸਟ੍ਰਕਚਰ ਤੋਂ ਬਿਨਾਂ ਸਮਿਲਰਿਟੀ ਸਰਚ ਦਾ ਵਾਅਦਾ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, LanceDB ਵਰਗੇ ਸਮਰਪਿਤ (dedicated) ਸਟੋਰ ਘੱਟ ਲੇਟੈਂਸੀ ਅਤੇ ਸਸਤੇ ਸਟੋਰੇਜ ਦਾ ਦਾਅਵਾ ਕਰਦੇ ਹਨ। ਟੀਮਾਂ ਨੂੰ "ਜੋ ਸਾਡੇ ਕੋਲ ਹੈ ਉਸ ਵਿੱਚ ਇਸਨੂੰ ਜੋੜੋ" ਅਤੇ "ਇੱਕ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਬਣਾਇਆ ਗਿਆ ਇੰਜਣ ਚਲਾਓ" ਵਿਚਕਾਰ ਚੋਣ ਕਰਨੀ ਪੈਂਦੀ ਹੈ, ਇੱਕ ਅਜਿਹਾ ਫੈਸਲਾ ਜੋ ਡੇਟਾਸੈਟ ਵਧਣ ਅਤੇ ਰਿਕੁਐਸਟ ਰੇਟ ਵਧਣ ਨਾਲ ਲਾਗਤ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ (performance) ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ।
ਟੈਸਟ ਕਿਵੇਂ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਸੀ
ਦੋਵਾਂ ਪ੍ਰਣਾਲੀਆਂ ਨੇ OpenAI ਦੇ ਐਮਬੈਡਿੰਗ ਮਾਡਲ ਦੁਆਰਾ ਤਿਆਰ ਕੀਤੇ ਗਏ ਇੱਕੋ ਜਿਹੇ 100k ਵੈਕਟਰਾਂ ਨੂੰ ਇੰਡੈਕਸ ਕੀਤਾ, ਜਿਨ੍ਹਾਂ ਵਿੱਚੋਂ ਹਰ ਇੱਕ ਦੇ 1536 ਡਾਇਮੈਂਸ਼ਨਜ਼ ਸਨ। ਅਸੀਂ ਇੰਜੈਸਸ਼ਨ ਸਪੀਡ (ingestion speed), ਡਿਸਕ ਵਰਤੋਂ, ਸਿੰਗਲ-ਥ੍ਰੈਡ ਕੁਐਰੀ ਲੇਟੈਂਸੀ ਅਤੇ ਅੱਠ ਕੰਕਰੈਂਟ ਕਲਾਇੰਟਾਂ ਨਾਲ ਥਰੂਪੁੱਟ (throughput) ਨੂੰ ਮਾਪਿਆ।
ਸਿੱਧਾ ਮੁਕਾਬਲਾ (Head-to-head) ਨਤੀਜੇ
- Ingestion speed – LanceDB ਨੇ 22× ਫਾਇਦਾ ਦਰਜ ਕੀਤਾ।
- Disk footprint – LanceDB ਨੇ ਵੈਕਟਰਾਂ ਨੂੰ pgvector ਦੁਆਰਾ ਵਰਤੀ ਗਈ ਜਗ੍ਹਾ ਦੇ ਲਗਭਗ ਇੱਕ-ਤਿਹਾਈ ਹਿੱਸੇ ਵਿੱਚ ਸਟੋਰ ਕੀਤਾ।
- Single-thread latency – LanceDB 'ਤੇ ਕੁਐਰੀਆਂ ਲਗਭਗ ਦੁੱਗਣੀ ਤੇਜ਼ ਚੱਲੀਆਂ।
- Concurrency scaling – ਅੱਠ ਪੈਰਲਲ ਕਲਾਇੰਟਾਂ ਦੇ ਨਾਲ, pgvector ਨੇ LanceDB ਦੇ ਮੁਕਾਬਲੇ 1.8× ਉੱਚਾ ਥਰੂਪੁੱਟ ਦਿੱਤਾ।
ਅੰਤਰਾਂ ਦੀਆਂ ਆਰਕੀਟੈਕਚਰਲ ਜੜ੍ਹਾਂ
LanceDB ਇੱਕ ਐਮਬੈਡਡ ਲਾਇਬ੍ਰੇਰੀ ਹੈ ਜੋ ਉਸ Python ਪ੍ਰੋਸੈਸ ਦੇ ਅੰਦਰ ਚੱਲਦੀ ਹੈ ਜੋ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਹੋਸਟ ਕਰਦਾ ਹੈ। ਸਾਰੀਆਂ ਕਾਰਵਾਈਆਂ ਇਨ-ਪ੍ਰੋਸੈਸ (in-process) ਰਹਿੰਦੀਆਂ ਹਨ, ਇਸ ਲਈ ਡੇਟਾ ਕਦੇ ਵੀ ਨੈੱਟਵਰਕ ਦੀ ਸੀਮਾ ਨੂੰ ਪਾਰ ਨਹੀਂ ਕਰਦਾ ਅਤੇ ਇੰਡੈਕਸ ਬਹੁਤ ਘੱਟ ਓਵਰਹੈੱਡ ਨਾਲ ਅਪਡੇਟ ਹੁੰਦਾ ਹੈ। ਇਹ ਡਿਜ਼ਾਈਨ ਸਿੰਗਲ-ਟਾਸਕ ਵਰਕਲੋਡ ਲਈ ਬਹੁਤ ਵਧੀਆ ਹੈ ਪਰ ਜਦੋਂ ਕਈ Python ਥ੍ਰੈਡਸ Global Interpreter Lock (GIL) ਲਈ ਮੁਕਾਬਲਾ ਕਰਦੇ ਹਨ, ਤਾਂ ਇਹ ਇੱਕ ਸੀਮਾ 'ਤੇ ਪਹੁੰਚ ਜਾਂਦਾ ਹੈ, ਜੋ Python ਬਾਈਟਕੋਡ ਦੇ ਅਸਲ ਪੈਰਲਲ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਨੂੰ ਰੋਕਦਾ ਹੈ।
pgvector ਸਰਵਰ ਸਾਈਡ 'ਤੇ PostgreSQL ਦਾ ਵਿਸਤਾਰ ਕਰਦਾ ਹੈ। ਹਰ ਕਲਾਇੰਟ ਕਨੈਕਸ਼ਨ ਇੱਕ ਵੱਖਰਾ ਸਰਵਰ ਪ੍ਰੋਸੈਸ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਜੋ ਪੂਰੀ ਤਰ੍ਹਾਂ GIL ਨੂੰ ਬਾਈਪਾਸ ਕਰ ਦਿੰਦਾ ਹੈ। PostgreSQL ਪਲਾਨਰ ਇਹ ਫੈਸਲਾ ਕਰਦਾ ਹੈ ਕਿ ਸਮਿਲਰਿਟੀ ਸਰਚ ਨੂੰ ਕਿਵੇਂ ਪੂਰਾ ਕਰਨਾ ਹੈ, ਅਤੇ ਸਰਵਰ ਕੰਕਰੈਂਟ ਰਿਕੁਐਸਾਂ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਕਈ ਪ੍ਰੋਸੈਸ ਸ਼ੁਰੂ ਕਰ ਸਕਦਾ ਹੈ। ਇਹ ਆਇਸੋਲੇਸ਼ਨ (isolation) ਲੋਡ ਦੇ ਹੇਠਾਂ ਬਿਹਤਰ ਸਕੈਲਿੰਗ ਦੀ ਵਿਆਖਿਆ ਕਰਦਾ ਹੈ।
ਫਿਲਟਰਿੰਗ ਅਤੇ ਕੁਐਰੀ ਪਲਾਨਿੰਗ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ
ਅਸਲ ਦੁਨੀਆ ਦੇ RAG ਪਾਈਪਲਾਈਨ ਅਕਸਰ ਵੈਕਟਰ ਸਮਿਲਰਿਟੀ ਨੂੰ ਰਵਾਇਤੀ ਫਿਲਟਰਾਂ (ਜਿਵੇਂ ਕਿ WHERE user_id = 42) ਨਾਲ ਜੋੜਦੇ ਹਨ। LanceDB ਇੱਕ ਪ੍ਰੀ-ਫਿਲਟਰ ਲਾਗੂ ਕਰਦਾ ਹੈ ਜੋ ਹਰ ਵਾਰ ਨਿਰਧਾਰਤ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ। pgvector PostgreSQL ਦੇ ਕੁਐਰੀ ਪਲਾਨਰ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ, ਜੋ ਅੰਕੜਿਆਂ (statistics) ਦੇ ਆਧਾਰ 'ਤੇ ਇੱਕ ਤੇਜ਼ ਇੰਡੈਕਸ ਸਕੈਨ ਚੁਣ ਸਕਦਾ ਹੈ ਜਾਂ ਇੱਕ ਹੌਲੀ ਐਗਜ਼ੈਕਟ ਸਕੈਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹੈ। pgvector ਟੇਬਲ ਵਿੱਚ ਬਲਕ ਲੋਡਿੰਗ ਤੋਂ ਬਾਅਦ ANALYZE ਚਲਾਉਣ ਨਾਲ ਉਹ ਅੰਕੜੇ ਤਾਜ਼ਾ ਹੋ ਜਾਂਦੇ ਹਨ; ਇਸ ਤੋਂ ਬਿਨਾਂ, ਰੀਕਾਲ (recall) ਲਗਭਗ ਜ਼ੀਰੋ ਤੱਕ ਡਿੱਗ ਸਕਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਸਰਚ ਪ੍ਰਕਿਰਿਆ ਪ੍ਰਭਾਵਿਤ ਹੋ ਸਕਦੀ ਹੈ।
ਹਰ ਵਿਕਲਪ ਕਦੋਂ ਸਹੀ ਹੈ
pgvector ਚੁਣੋ ਜੇਕਰ
- ਤੁਹਾਡਾ ਸਟੈਕ ਪਹਿਲਾਂ ਹੀ PostgreSQL ਨੂੰ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇੱਕ ਹੋਰ ਸਰਵਿਸ ਜੋੜਨ ਤੋਂ ਬਚਣਾ ਚਾਹੁੰਦੇ ਹੋ।
- ਤੁਸੀਂ ਬਹੁਤ ਸਾਰੇ ਸਮਾਨਾਂਤਰ (simultaneous) ਯੂਜ਼ਰਸ ਜਾਂ API ਕਾਲਾਂ ਦੀ ਉਮੀਦ ਕਰਦੇ ਹੋ।
- ACID ਗਾਰੰਟੀ ਅਤੇ ਜਾਣੇ-ਪਛਾਣੇ DBA ਟੂਲ ਮਹੱਤਵਪੂਰਨ ਹਨ।
LanceDB ਚੁਣੋ ਜੇਕਰ
- ਤੁਹਾਡਾ ਵਰਕਫਲੋ ਇੱਕ ML ਪਾਈਪਲਾਈਨ ਹੈ ਜੋ ਅਕਸਰ ਨਵੇਂ ਐਮਬੈਡਿੰਗਸ ਨੂੰ ਇੰਜੈਸਟ ਕਰਦੀ ਹੈ।
- ਤੁਹਾਨੂੰ ਸਿੰਗਲ-ਰਿਕੁਐਸਟ ਏਜੰਟਾਂ (ਜਿਵੇਂ ਕਿ ਚੈਟ ਬੋਟਸ) ਲਈ ਸਭ ਤੋਂ ਤੇਜ਼ ਰਾਈਟ ਪਾਥ ਅਤੇ ਘੱਟ ਲੇਟੈਂਸੀ ਦੀ ਲੋੜ ਹੈ।
- ਡਿਸਕ ਦੀ ਲਾਗਤ ਇੱਕ ਚਿੰਤਾ ਹੈ ਅਤੇ ਤੁਸੀਂ ਸਿੰਗਲ-ਥ੍ਰੈਡ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਸੀਮਾ ਨੂੰ ਸਹਿ ਸਕਦੇ ਹੋ।
ਸਿੱਟਾ: ਜੇਕਰ ਕੱਚੀ ਇੰਜੈਸਸ਼ਨ ਸਪੀਡ, ਘੱਟ ਤੋਂ ਘੱਟ ਸਟੋਰੇਜ, ਅਤੇ ਸਿੰਗਲ-ਰਿਕੁਐਸਟ ਲੇਟੈਂਸੀ ਸਭ ਤੋਂ ਵੱਧ ਮਹੱਤਵਪੂਰਨ ਹੈ, ਤਾਂ LanceDB ਜਿੱਤਦਾ ਹੈ। ਜੇਕਰ ਤੁਹਾਨੂੰ ਇੱਕੋ ਸਮੇਂ ਬਹੁਤ ਸਾਰੇ ਯੂਜ਼ਰਸ ਨੂੰ ਸਰਵ ਕਰਨਾ ਹੈ ਅਤੇ ਮੌਜੂਦਾ PostgreSQL ਡਿਪਲਾਈਮੈਂਟ 'ਤੇ ਨਿਰਭਰ ਕਰਨਾ ਹੈ, ਤਾਂ pgvector ਦਾ ਕੰਕਰੈਂਸੀ ਫਾਇਦਾ ਇਸਨੂੰ ਇੱਕ ਸੁਰੱਖਿਅਤ ਵਿਕਲਪ ਬਣਾਉਂਦਾ ਹੈ। ਆਪਣੇ ਉਤਪਾਦ ਦੇ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਮੈਟ੍ਰਿਕ ਦੇ ਅਨੁਸਾਰ ਸਟੋਰ ਚੁਣਨ ਲਈ ਇਸ ਬੈਂਚਮਾਰਕ ਦੇ ਅੰਕੜਿਆਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।
