Skip to content

MygramDB vs Elasticsearch vs MySQL FULLTEXT

Choosing the right full-text search solution depends on your requirements. Here's a detailed comparison.

Quick Comparison

FeatureMygramDBElasticsearchMySQL FULLTEXT
Latency<80ms50-500ms100-3000ms
DeploymentSingle binaryClusterBuilt-in
Data syncMySQL binlogETL requiredNative
ScalabilitySingle nodeDistributedSingle node
Memory~1-2GB/1M docs~2-4GB/1M docsBuffer pool
ConcurrencyQPS 372HighQPS 0.4
CJK supportN-gramPluginsN-gram parser
AnalyticsBasicAdvancedNone
Learning curveLowHighLow

Detailed Comparison

MygramDB

Best for: MySQL-based applications needing fast search without infrastructure complexity.

Pros:

  • Sub-80ms consistent latency
  • Zero configuration data sync via binlog
  • Single binary deployment
  • No cluster management
  • Perfect for CJK text with N-gram

Cons:

  • Single node only (no distributed search)
  • Data must fit in RAM
  • Basic query features (no fuzzy, highlighting)

Elasticsearch

Best for: Large-scale search with advanced analytics requirements.

Pros:

  • Horizontal scalability
  • Advanced features (fuzzy, highlighting, aggregations)
  • Rich ecosystem and tooling
  • Handles petabytes of data

Cons:

  • Complex cluster management
  • ETL pipeline required
  • Higher operational cost
  • Steeper learning curve
  • JVM tuning required

MySQL FULLTEXT

Best for: Simple search on small datasets (<100K rows).

Pros:

  • No additional infrastructure
  • Native MySQL integration
  • Zero data sync overhead

Cons:

  • Slow (100-3000ms per query)
  • Fails under concurrent load (90% failure at 10 concurrent)
  • Cache-dependent performance
  • Limited scalability

Performance Comparison

Tested on 1.7M rows, 10 concurrent queries:

MetricMygramDBElasticsearch*MySQL FULLTEXT
Success rate100%~100%10%
Avg latency35ms100-200ms4,641ms
QPS28850-1000.4

*Elasticsearch performance varies significantly based on cluster configuration.

Migration Path

From MySQL FULLTEXT to MygramDB

  1. Keep MySQL as primary database
  2. Deploy MygramDB alongside
  3. Point search queries to MygramDB
  4. Write operations remain on MySQL
bash
# 1. Start MygramDB
docker run -d -p 11016:11016 \
  -e MYSQL_HOST=your-mysql \
  ghcr.io/libraz/mygram-db:latest

# 2. Search via MygramDB
curl "http://localhost:8080/articles/search" \
  -d '{"q": "search term"}'

From Elasticsearch to MygramDB

Consider migrating if:

  • You don't need distributed search
  • Data fits in single-node RAM
  • Operational complexity is a concern
  • You want simpler MySQL integration

See GitHub for more details.

Released under the MIT License.