You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: README.md
+5-20
Original file line number
Diff line number
Diff line change
@@ -12,26 +12,8 @@ In a nutshell, it allows you to write LINQ-like queries *without* enumerating th
12
12
through your data, expect huge [speedups](docs/Benchmarks.md) and much better scalability!
13
13
14
14
<!--TOC-->
15
-
-[Overview](#overview)
16
-
-[Design Goals](#design-goals)
17
-
-[Performance and Operation-Support of the different indices:](#performance-and-operation-support-of-the-different-indices)
18
-
-[General queries](#general-queries)
19
-
-[String queries](#string-queries)
20
-
-[Features](#features)
21
-
-[Unique index (single entity, single key)](#unique-index-single-entity-single-key)
22
-
-[Non-unique index (multiple entities, single key)](#non-unique-index-multiple-entities-single-key)
23
-
-[Non-unique index (multiple entities, multiple keys)](#non-unique-index-multiple-entities-multiple-keys)
24
-
-[Range index](#range-index)
25
-
-[String indices and fuzzy matching](#string-indices-and-fuzzy-matching)
26
-
-[Computed or compound key](#computed-or-compound-key)
27
-
-[Concurrency and Thread-Safety](#concurrency-and-thread-safety)
28
-
-[No reflection and no expressions - convention-based index naming](#no-reflection-and-no-expressions-convention-based-index-naming)
29
-
-[FAQs](#faqs)
30
-
-[How do I use multiple index types for the same property?](#how-do-i-use-multiple-index-types-for-the-same-property)
31
-
-[How do I update key values if the elements are already in the set?](#how-do-i-update-key-values-if-the-elements-are-already-in-the-set)
32
-
-[How do I do case-insensitve (fuzzy) string matching (Prefix, FullTextIndex)?](#how-do-i-do-case-insensitve-fuzzy-string-matching-prefix-fulltextindex)
33
-
-[Roadmap](#roadmap)
34
15
<!--/TOC-->
16
+
35
17
## Overview
36
18
37
19
A sample showing different queries as you might want do for a report:
nodesThatConnectTo1=set.FullScan().Where(x=>x.ConnectsTo.Contains(1)); // returns nodes 3 & 4, but enumerates through the entire set
230
212
```
231
213
232
-
> ⚠ For range queries, this introduces a small overhead as the results are filtered to be distinct:
214
+
> :information_source: For range queries, this introduces a small overhead as the results are filtered to be distinct:
233
215
> i.e. `O(log n + m log m)` instead of `O(log n + m)`.
234
216
217
+
> :information_source: Multi-key string indices are marked experimental. Read more at [Experimental Features](docs/ExperimentalFeatures.md#AkadeIndexedSetEXP0001)
218
+
235
219
236
220
### Computed or compound key
237
221
@@ -348,6 +332,7 @@ Potential features (not ordered):
348
332
-[x] Benchmarks
349
333
-[x] Simplification of string indices, i.e. Span/String based overloads to avoid `AsMemory()`...
350
334
-[x] Analyzers to help with best practices
335
+
-[x] Multi-key everything: All index types can be used with multiple keys per element.
351
336
-[ ] Tree-based range index for better insertion performance
352
337
-[ ] Aggregates (i.e. sum or average: interface based on state & add/removal state update functions)
The new (.NET 8.0) [Experimental Attribute](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.experimentalattribute) is used to mark features that are more likely to change in the future.
4
+
**They are usually production-ready**, but we want to gather feedback from the community before we finalize them.
5
+
6
+
> :warning: In .NET 6 & 7, the `ExperimentalAttribute` is not available and we polyfill it but there is no compiler warning / error that will guide you!
7
+
8
+
## AkadeIndexedSetEXP0001
9
+
:information_source:**Multi-key string indices**
10
+
11
+
The multi-key string indices API is considered to be experimental because the API is allocation-heavy and might change to a `Span`-based API in the future.
12
+
13
+
However, the feature itself is production-ready, supported and is here to stay.
0 commit comments