rum
quickwit
rum | quickwit | |
---|---|---|
11 | 64 | |
693 | 6,098 | |
0.7% | 4.9% | |
4.0 | 9.8 | |
4 months ago | 7 days ago | |
C | Rust | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 or later |
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.
rum
-
Code Search Is Hard
the rum index has worked well for us on roughly 1TB of pdfs. written by postgrespro, same folks who wrote core text search and json indexing. not sure why rum not in core. we have no problems.
https://github.com/postgrespro/rum
-
Is it worth using Postgres' builtin full-text search or should I go straight to Elastic?
If you need ranking, and you have the possibility to install PostgreSQL extensions, then you can consider an extension providing RUM indexes: https://github.com/postgrespro/rum. Otherwise, you'll have to use an "external" FTS engine like ElasticSearch.
-
Features I'd Like in PostgreSQL
>Reduce the memory usage of prepared queries
Yes query plan reuse like every other db, this still blows me away PG replans every time unless you explicitly prepare and that's still per connection.
Better full-text scoring is one for me that's missing in that list, TF/IDF or BM25 please see: https://github.com/postgrespro/rum
-
Ask HN: Books about full text search
for postgres, i highly recommend the rum index over the core fts. rum is written by postgrespro, who also wrote core fts and json indexing in pg.
https://github.com/postgrespro/rum
-
Postgres Full Text Search vs. the Rest
My experience with Postgres FTS (did a comparison with Elastic a couple years back), is that filtering works fine and is speedy enough, but ranking crumbles when the resulting set is large.
If you have a large-ish data set with lots of similar data (4M addresses and location names was the test case), Postgres FTS just doesn't perform.
There is no index that helps scoring results. You would have to install an extension like RUM index (https://github.com/postgrespro/rum) to improve this, which may or may not be an option (often not if you use managed databases).
If you want a best of both worlds, one could investigate this extensions (again, often not an option for managed databases): https://github.com/matthewfranglen/postgres-elasticsearch-fd...
Either way, writing something that indexes your postgres database into elastic/opensearch is a one time investment that usually pays off in the long run.
-
Postgres Full-Text Search: A Search Engine in a Database
Mandatory mention of the RUM extension (https://github.com/postgrespro/rum) if this caught your eye. Lots of tutorials and conference presentations out there showcasing the advantages in terms of ranking, timestamps...
You might be just fine adding an unindexed tsvector column, since you've already filtered down the results.
The GIN indexes for FTS don't really work in conjunction with other indices, which is why https://github.com/postgrespro/rum exists. Luckily, it sounds like you can use your existing indices to filter and let postgres scan for matches on the tsvector.
- Postgrespro/rum: RUM access method – inverted index with additional information
-
Debugging random slow writes in PostgreSQL
We have been bitten by the same behavior. I gave a talk with a friend about this exact topic (diagnosing GIN pending list updates) at PGCon 2019 in Ottawa[1][2].
What you need to know is that the pending list will be merged with the main b-tree during several operations. Only one of them is so extremely critical for your insert performance - that is during actual insert. Both vacuum and autovacuum (including autovacuum analyze but not direct analyze) will merge the pending list. So frequent autovacuums are the first thing you should tune. Merging on insert happens when you exceed the gin_pending_list_limit. In all cases it is also interesting to know which memory parameter is used to rebuild the index as that inpacts how long it will take: work_mem (when triggered on insert), autovacuum_work_mem (when triggered during autovauum) and maintainance_work_mem (triggered by a call to gin_clean_pending_list()) define how much memory can be used for the rebuild.
What you can do is:
- tune the size of the pending list (like you did)
- make sure vacuum runs frequently
- if you have a bulk insert heavy workload (ie. nightly imports), drop the index and create it after inserting rows (not always makes sense business wise, depends on your app)
- disable fastupdate, you pay a higher cost per insert but remove the fluctuctuation when the merge needs to happen
The first thing was done in the article. However I believe the author still relies on the list being merged on insert. If vacuums were tuned agressively along with the limit (vacuums can be tuned per table). Then the list would be merged out of bound of ongoing inserts.
I also had the pleasure of speaking with one main authors of GIN indexes (Oleg Bartunov) during the mentioned PGCon. He gave probably the best solution and informed me to "just use RUM indexes". RUM[3] indexes are like GIN indexes, without the pending list and with faster ranking, faster phrase searches and faster timestamp based ordering. It is however out of the main postgresql release so it might be hard to get it running if you don't control the extensions that are loaded to your Postgres instance.
[1] - wideo https://www.youtube.com/watch?v=Brt41xnMZqo&t=1s
[2] - slides https://www.pgcon.org/2019/schedule/attachments/541_Let's%20...
[3] - https://github.com/postgrespro/rum
-
Show HN: Full text search Project Gutenberg (60m paragraphs)
I suggest to have a look at https://github.com/postgrespro/rum if you haven’t yet. It solves the issue of slow ranking in PostgreSQL FTS.
quickwit
- Show HN: Search on S3 Using AWS Lambda
-
Show HN: Quickwit – OSS Alternative to Elasticsearch, Splunk, Datadog
Hi folks, Quickwit cofounder here.
We started Quickwit 3 years ago with a POC, "Searching the web for under $1000/month" (see HN discussions [0]), with the goal of making a robust OSS alternative to Elasticsearch / Splunk / Datadog.
We have reached a significant milestone with our latest release (0.7) [1], as we have witnessed users of the nightly version of Quickwit deploy clusters with hundreds of nodes, ingest hundreds of terabytes of data daily, and enjoy considerable cost savings.
To give you a concrete example, one company is ingesting hundreds of terabytes of logs daily and migrating from Elasticsearch to Quickwit. They divided their compute costs by 5x and storage costs by 2x while increasing retention from 3 to 30 days. They also increased their durability, accuracy with exactly-once semantics thanks to the native Kafka support, and elasticity.
The 0.7 release also brings better integrations with the Observability ecosystem: improvements of the Elasticsearch-compatible API and better support of OpenTelemetry standards, Grafana, and Jaeger.
Of course, we still have a lot of work to be a fully-fledged observability engine, and we would love to get some feedback or suggestions.
To give you a glance at our 2024 roadmap, we planned to focus on Kibana/OpenDashboard integration, metrics support, and pipe-based query language.
[0] Searching the web for under $1000/month: https://news.ycombinator.com/item?id=27074481
[1] Release blog post: https://quickwit.io/blog/quickwit-0.7
[2] Open Source Repo: https://github.com/quickwit-oss/quickwit
[3] Home Page: https://quickwit.io
- Show HN: Quickwit – OSS Alternative to Datadog, Elasticsearch
-
S3 Express Is All You Need
We tested S3 Express for our search engine quickwit[0] a couple of weeks ago.
While this was really satisfying on the performance side, we were a bit disappointed by the price, and I mostly agree with the article on this matter.
I can see some very specific use cases where the pricing should be OK but currently, I would say most of our users should just stay on the classic S3 and add some local SSD caching if they have a lot of requests.
[0] https://github.com/quickwit-oss/quickwit/
-
Show HN: Quickwit – Cost-Efficient OSS Search Engine for Observability
Hi HN, I’m one of the builders of Quickwit, a cloud-native OSS search engine for observability. As of 2023, we support logs and traces, metrics will come in 2024.
You know the pitch: while software like Datadog or Splunk are great, they often comes with hefty price tags. Our mission is to offer an affordable alternative. So we’ve built Quickwit, we’ve made it compatible with the observabilty ecosystem (OpenTelemetry, Jaeger, Grafana) and above all, we’ve made it cost-efficient / “easy” to scale (well it’s never easy to scale to petabytes..).
To give you a glance at the engine performance I made a benchmark on the GitHub Archive dataset, 23 TB of events, here are the main observations:
Indexing: costs $2 per ingested TB. With 4CPU, throughput is at 20MBs However, you'll observe > 30MB throughput on simpler datasets, like logs and traces.
Search: a typical query costs $0.0002 per TB (considering both CPU time and GET request costs). Using 8CPU, a simple query on 23TB is achieved in under a second.
Storage: on S3, it costs $8 per ingested TB per month on the GitHub Archive dataset. With logs and traces, you might see costs around $5/ingested TB due to a 2x better compression ratio.
I'm eager to get your thoughts on this!
Benchmark: https://quickwit.io/blog/benchmarking-quickwit-engine-on-an-...
Github repo: https://github.com/quickwit-oss/quickwit/
Website: https://quickwit.io/
- On S3, it costs $8 per ingested TB per month on the GitHub Archive dataset. With logs and traces, you might see costs around $4/ingested TB due to a 2x better compression ratio.
I'm eager to get your thoughts on this!
[0] Benchmark: https://quickwit.io/blog/benchmarking-quickwit-engine-on-an-...
- OSS Sub-second search and analytics engine on cloud storage
-
Ask HN: Who is hiring? (September 2023)
Quickwit (https://quickwit.io/) | Paris, France | Onsite and remote (based in Europe) | Full-time
The company is fully remote but we also have a small office in Paris. We prefer candidates based in Europe but can make exceptions for the right profiles.
- Senior Software Engineer 80-110k€ + 0.25-1% equity based on experience.
We’re looking for a senior software engineer to contribute to [Quickwit](https://github.com/quickwit-oss/quickwit), our open-source search and analytics engine. We have an ambitious roadmap for the next 18 months (performance optimization, distributed storage, support for SQL, query optimizer, revamp of our execution engine, etc.), and this is a great opportunity to shape the future of Quickwit while tackling fun and challenging problems in the field of distributed databases.
-
Observe your Rust application with Quickwit, Jaeger and Grafana
In our latest blog post, we walk you through the steps of instrumenting your Rust application and monitoring the performance on Grafana using Quickwit + Jaeger.
-
Quickwit 0.6.0 - Search and analytics on billions of logs with minimal hardware
Link: https://github.com/quickwit-oss/quickwit
What are some alternatives?
postgres-elasticsearch-fdw - Postgres to Elastic Search Foreign Data Wrapper
MeiliSearch - A lightning-fast search API that fits effortlessly into your apps, websites, and workflow
recoll - recoll with webui in a docker container
loki - Like Prometheus, but for logs.
zombodb - Making Postgres and Elasticsearch work together like it's 2023
elasticsearch-py - Official Python client for Elasticsearch
pgvector - Open-source vector similarity search for Postgres
manticoresearch - Easy to use open source fast database for search | Good alternative to Elasticsearch now | Drop-in replacement for E in the ELK soon
pg_search - pg_search builds ActiveRecord named scopes that take advantage of PostgreSQL’s full text search
openobserve - 🚀 10x easier, 🚀 140x lower storage cost, 🚀 high performance, 🚀 petabyte scale - Elasticsearch/Splunk/Datadog alternative for 🚀 (logs, metrics, traces, RUM, Error tracking, Session replay).
pg_cjk_parser - Postgres CJK Parser pg_cjk_parser is a fts (full text search) parser derived from the default parser in PostgreSQL 11. When a postgres database uses utf-8 encoding, this parser supports all the features of the default parser while splitting CJK (Chinese, Japanese, Korean) characters into 2-gram tokens. If the database's encoding is not utf-8, the parser behaves just like the default parser.
zincsearch - ZincSearch . A lightweight alternative to elasticsearch that requires minimal resources, written in Go.