Giter Club home page Giter Club logo

hugedbbench's Introduction

hugedbbench

huge list of database benchmark

  • 2019-04 - MemSQL vs ScyllaDB vs PostgreSQL vs NuoDB vs Clickhouse vs MySQL vs CrateDB vs CockroachDB vs YugabyteDB
  • 2021-11 - CockroachDB vs TiDB vs YugabyteDB
  • 2021-11 - Kafka vs RedPanda vs Tarantool vs Clickhouse (as queue)
  • 2022-04 - NATS vs FabioLB (not database)
  • 2022-12 - CockroachDB on RAM/NVMe/SSD/HDD
  • 2023-01 - PostgreSQL vs Tarantool using various ORM
  • 2023-04 - Redis vs PostgreSQL vs Tarantool vs TypeSense vs MeiliSearch geosearch benchmark
  • 2024-01 - PostgreSQL vs CockroachDB vs Tarantool benchmark
  • 2024-05 - Redis SET+GET vs Redis HSET+TTL+HGETALL vs Tarantool
  • TODO: FTS benchmark, use this dataset: https://github.com/alexa/massive

hugedbbench's People

Contributors

akbarfa49 avatar dependabot[bot] avatar kokizzu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

hugedbbench's Issues

Meilisearch

Hey, I've just seen your blogpost. It's awesome!

I can't really submit a PR because I don't know much about golang, but I see you had some issues with meilisearch, and I thought I could help!

1. This benchmark is totally unfair for Meilisearch since their API expects it to be batched

I don't think that's entirely true. Meilisearch can autobatch your updates on its side. The issue in your code is that between each update submitted to meilisearch, you wait until the task is processed:

		task, err := index.AddDocuments([]map[string]interface{}{
			{"id": id, "_geo": []any{lat, long}},
		})
		L.IsError(err, `index.AddDocuments`)
		if err == nil {
			_, err := client.WaitForTask(task.TaskUID) // <- you should not wait here
			L.IsError(err, `client.WaitForTask AddDocuments`) 
			return err
		}

As you said, ideally, you should batch your updates as much as possible. But if you don't, meilisearch should still be able to handle your data pretty fast.

In your case, I think the sensible thing would be to WaitForTask only once after inserting the 100k points.

2. MeiliSearch, in this case, always returns 0 results. Not sure what's wrong.

I don't really understand what's wrong either yet.

I've seen this comment, though;

		// _geoBoundingBox: [minLat, minLong, maxLat, maxLong] --> didn't work

And this is wrong, this is the accepted format by meilisearch;

Filter documents by a given geo bounding box using the built-in filter _geoBoundingBox([{lat}, {lng}], [{lat, lng}]). The first pair of coordinates represents the top right corner of the bounding box, while the second pair represents the bottom left corner.

So in your case, you should send something like that _geoBoundingBox([maxLat, maxLong], [minLong, minLat])


		// TODO: need to calculate distance manually (~10% overhead)
		return uint64(len(res.Hits)), nil

I don't really understand this comment either, but if you were looking for the distance between your initial point and the results, meilisearch already computes that for you. It's added in all of your hits under the field _geoDistance.


Don't hesitate if you have any questions!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.