Just Brute Force Your Embeddings Instead of Using a Vector Database

Just Brute Force Your Embeddings Instead of Using a Vector Database

I often see teams overcomplicating search by adopting heavy vector databases for small datasets. For around one million documents with low traffic, a simple Numpy brute-force approach on an M4 MacBook Pro delivers impressive speed without the operational overhead. You can achieve fast retrieval using basic dot products in Python until your scale truly demands a specialized database.

My O(n) algorithm can run circles around your O(log n) algorithm; why much of what you learned in school simply doesn't matter.
  1. emschwartz

    This works especially well if your embedding model was trained to perform well with quantized embeddings. Binary + hamming distance = incredibly fast.

    This post is from 2024 but I wrote about using this technique in https://emschwartz.me/binary-vector-embeddings-are-so-cool/

  2. Ellis_dev

    The 1M-document numbers are a great reality check. I’d happily start with the NumPy version and only reach for a vector DB once it actually hurts.

  3. firasd

    Yes! I'm working on an MCP server called Liveclip (not released yet) and we just store embeddings as text in SQLite.. it works over ~40MB of text, 1450 SCOTUS opinions

    start=$(date +%s); curl -s -X POST "https://[urlredacted].workers.dev/mcp" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"table_search_similar","arguments":{"key":"scotus_2010s","col":"M","query":"endangered fish"}}}'

    2>&1 | grep '^data:' | sed 's/^data: //' | jq; end=$(date +%s); echo "elapsed: $((end-start))s"

    {

    "result": {

    "content": [],

    "structuredContent": {

    "has_more": true,

    "headers": {

    "A": "author_name",

    "B": "category",

    "C": "per_curiam",

    "D": "case_name",

    "E": "date_filed",

    "F": "federal_cite_one",

    "G": "absolute_url",

    "H": "year_filed",

    "I": "scdb_id",

    "J": "scdb_decision_direction",

    "K": "scdb_votes_majority",

    "L": "scdb_votes_minority",

    "M": "text"

    },

    "offset": 0,

    "ok": true,

    "rows": [

    {

    "A": "Justice Thomas",

    "B": "dissenting",

    "C": "False",

    "D": "Florida v. Georgia",

    "E": "2018-06-27",

    "F": "",

    "G": "https://www.courtlistener.com/opinion/4511641/florida-v-geor...",

    "H": "2018",

    "I": "",

    "J": "",

    "K": "",

    "L": "", […]

More from this day

2026-07-31