sonic VS ecto

Compare sonic vs ecto and see what are their differences.

sonic

🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM. (by valeriansaliou)

ecto

A toolkit for data mapping and language integrated query. (by elixir-ecto)
Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
sonic ecto
48 14
19,317 5,974
- 1.0%
7.5 9.1
3 months ago 8 days ago
Rust Elixir
Mozilla Public License 2.0 Apache License 2.0
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

sonic

Posts with mentions or reviews of sonic. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-02-06.

ecto

Posts with mentions or reviews of ecto. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-14.
  • Idempotent seeds in Elixir
    2 projects | dev.to | 14 Mar 2024
    To ruin the party, deterministic UUID generation is exactly what UUID v5 is designed for. And since Ecto does not validate UUIDs against their specs, you might as well use uuid again and do:
  • Sketch of a Post-ORM
    14 projects | news.ycombinator.com | 2 Jun 2023
    To me this looks a lot like ecto https://github.com/elixir-ecto/ecto

    Is there a significant difference?

  • Dependency inversion on Elixir using Ports and Adapters design pattern
    2 projects | dev.to | 10 Jan 2023
    Ecto database driver use-case
  • Do I need to use Elixir from Go perspective?
    5 projects | /r/elixir | 9 Jan 2023
    When it comes to building microservices, Go has the advantage of being easier to deploy and tighter integration with gRPC. On the other hand, Elixir will provide a more expressive layer to communicate with the database through Ecto.
  • Ask HN: Is my software stack choice sound?
    3 projects | news.ycombinator.com | 3 Aug 2022
    May I ask why CouchDB though? Is it for the offline support?

    Phoenix comes with its own database tool called Ecto[0] which is excellent, and it uses Postgres by default. If you're not intended to leverage CouchDB for offline support you should go Postgres without a second thought.

    That said, I'm also curious about how to implement offline support with Phoenix in a nice and trivial way.

    [0] https://github.com/elixir-ecto/ecto

  • Do it to learn Elixir
    2 projects | dev.to | 15 Jun 2022
    The best would be to set aside at least 40 minutes of study a day. Being 20 minutes focused on the core of the language, solving problems and a website that can help you a lot and exercism. Another 20 minutes some of the core frameworks like: Phoenix, Ecto, Enum
  • Using CQRS in a simple Phoenix API with Commanded
    7 projects | dev.to | 10 May 2022
    This is a testiment to the value and productivity of Phoenix, but the resulting code is just basic CRUD. The views are tied 1:1 with their database-backed Ecto schemas. One thing to note is that Phoenix generates DDD-style contexts. This is unlike Rails, which would produce a typical ActiveRecord sprawl: bloated models directly being accessed and lazily queried across the entire application.
  • How to Use Macros in Elixir
    3 projects | dev.to | 2 Nov 2021
    Ecto uses prewalk to count the number of interpolations within a given expression.
  • Dynamic Queries in Ecto (Elixir Lang)
    3 projects | news.ycombinator.com | 15 Sep 2021
    I've used my share of data access libraries and patterns (e.g. hibernate, activerecord, ecto, ...). The only time I've been happy is when I use raw SQL for non-dynamic SQL and a lightweight query builder for everything else.

    I feel like I always run into some thing that at best isn't intuitive to express/read and at worse, cannot be expressed. If I remember correctly, when I was learning Elixir/Ecto, https://github.com/elixir-ecto/ecto/issues/1616 issue and the lack of lateral join support caused me issues.

    Want to create a user?

    "insert into users (id, name, status) values ($1, $2, $3)"

    Our query builder takes pretty raw SQL fragments:

        q = Query.new()
  • Metaprogramming in Elixir
    5 projects | news.ycombinator.com | 22 May 2021
    I see this criticism a lot but I don't think it has anything to do with macros specifically and more so to do with lack of familiarity with Elixir. I've felt the same way about Django being magic because I had trouble following the class hierarchy. It makes a lot more sense now because I'm more familiar with Python and Django. But even today I'll be looking deeper at something and ask WTF it's doing. In that respect, Elixir codebases are easier to me. The module depth seems "shallower" and I don't have to disambiguate between what behavior is caused by class inheritance or an imported function.

    When I first tried to use Elixir several years ago Ecto.Schema [0] seemed complex and magical, but then I came to realize it's just converting module attributes to runtime code. There is not really that much complex macro logic going on.

    >This also leads to cryptic errors where you get an error in non existant lines of code.

    When was the last time you used Elixir? This isn't a problem I can recall having in the last 4 years or so of using Elixir.

    >following the control flow in Phoenix is like a maze because of all the macro substitutions.

    Can you clarify what you mean by this? A specific case as to where this happened for you would help. Phoenix's use of macros is actually pretty light [1] except for some very low level stuff. You can even see how frequently a developer will use macros in Phoenix by searching `__using__` in the codebase [2]. It's not used as much as people think. The majority is for views and controllers and only to provide a very thin layer of support on top of your regular use of code. As an example, the "macro magic" in Phoenix.Controller is just handling some basics for giving a layout and view to Plug and handling fallback actions for exceptions. You could do the plug calls manually and I think it would be safe to not use any macros in your controller code.

    Another familiarity issue with the language (and any language really) is understanding what is meaningful in a stack trace and what isn't. And the likely cause of the error in the first place. Is it syntax? Is it mistyping a variable? Is a function just used improperly? (wtf is init_p_do_apply and why does it show up in every stacktrace?) You're juggling all these different issues - learning a new paradigm, a new syntax, not knowing how to extend things. It's obviously going to be a little overwhelming and, if not strictly required, we might just pick a different language that we're more familiar with.

    [0]: https://github.com/elixir-ecto/ecto/blob/master/lib/ecto/sch...

    [1]: https://github.com/thechangelog/changelog.com/blob/master/li... (not mine, I just go here to show the most frequent use of macros in Phoenix)

    [2]: https://github.com/phoenixframework/phoenix/search?q=__using...

What are some alternatives?

When comparing sonic and ecto you can also consider the following projects:

MeiliSearch - A lightning-fast search API that fits effortlessly into your apps, websites, and workflow

fastapi - FastAPI framework, high performance, easy to learn, fast to code, ready for production

Typesense - Open Source alternative to Algolia + Pinecone and an Easier-to-Use alternative to ElasticSearch ⚡ 🔍 ✨ Fast, typo tolerant, in-memory fuzzy Search Engine for building delightful search experiences

moebius - A functional query tool for Elixir

amnesia - Mnesia wrapper for Elixir.

postgrex - PostgreSQL driver for Elixir

tantivy - Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust

couchdb_connector - A couchdb connector for Elixir

riak - A Riak client written in Elixir.

datomex - Elixir driver for the Datomic REST API

tantivy - Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust [Moved to: https://github.com/quickwit-oss/tantivy]

shards - Partitioned ETS tables for Erlang and Elixir