You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2024/11/15 04:53:23 UTC
(skywalking-banyandb) 03/05: Merge remote-tracking branch 'origin/index' into index
This is an automated email from the ASF dual-hosted git repository.
hanahmily pushed a commit to branch index
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
commit f405da318a01f91390b5b4fcb542e71dbaca9121
Merge: dbc21e88 66574f0d
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed Nov 13 10:26:16 2024 +0800
Merge remote-tracking branch 'origin/index' into index
api/proto/banyandb/database/v1/schema.proto | 2 +
banyand/internal/storage/index.go | 52 ++++-----
banyand/internal/storage/index_test.go | 2 +-
banyand/internal/storage/storage.go | 2 +-
banyand/measure/query.go | 168 +++++++++++++++++++++++++---
banyand/measure/write.go | 35 ++++--
docs/api-reference.md | 1 +
pkg/index/index.go | 10 +-
pkg/index/inverted/inverted.go | 5 +-
pkg/index/inverted/inverted_series.go | 31 +++--
pkg/partition/index.go | 25 +++--
pkg/query/model/model.go | 20 ++++
12 files changed, 277 insertions(+), 76 deletions(-)
diff --cc banyand/internal/storage/index.go
index ef963983,fc5083c3..ba3bd443
--- a/banyand/internal/storage/index.go
+++ b/banyand/internal/storage/index.go
@@@ -243,12 -245,12 +245,12 @@@ func (s *seriesIndex) Search(ctx contex
}
query, err := s.store.BuildQuery(seriesMatchers, opts.Query)
if err != nil {
- return nil, nil, err
+ return nil, nil, nil, err
}
- iter, err := s.store.Iterator(ctx, fieldKey, rangeOpts,
+ iter, err := s.store.SeriesSort(ctx, fieldKey, rangeOpts,
opts.Order.Sort, opts.PreloadSize, query, opts.Projection)
if err != nil {
- return nil, nil, err
+ return nil, nil, nil, err
}
defer func() {
err = multierr.Append(err, iter.Close())
diff --cc banyand/measure/write.go
index bb6165d3,13d5aec0..6f5a9659
--- a/banyand/measure/write.go
+++ b/banyand/measure/write.go
@@@ -156,27 -156,33 +156,35 @@@ func (w *writeCallback) handle(dst map[
t.Name,
t.Type,
tagValue)
- if r, ok := tfr[t.Name]; ok {
+ r, ok := tfr[t.Name]
+ if ok || stm.schema.NonTimeSeries {
+ fieldKey := index.FieldKey{}
+ switch {
+ case ok:
+ fieldKey.IndexRuleID = r.GetMetadata().GetId()
+ fieldKey.Analyzer = r.Analyzer
+ case stm.schema.NonTimeSeries:
+ fieldKey.TagName = t.Name
+ default:
+ logger.Panicf("metadata crashed, tag family rule %s not found", t.Name)
+ }
+ toIndex := ok || !stm.schema.NonTimeSeries
if encodeTagValue.value != nil {
fields = append(fields, index.Field{
- Key: index.FieldKey{
- IndexRuleID: r.GetMetadata().GetId(),
- Analyzer: r.Analyzer,
- },
- Key: fieldKey,
- Term: encodeTagValue.value,
- Store: true,
- Index: toIndex,
++ Key: fieldKey,
+ Term: encodeTagValue.value,
+ Store: true,
++ Index: toIndex,
+ NoSort: r.GetNoSort(),
})
} else {
for _, val := range encodeTagValue.valueArr {
fields = append(fields, index.Field{
- Key: index.FieldKey{
- IndexRuleID: r.GetMetadata().GetId(),
- Analyzer: r.Analyzer,
- },
- Key: fieldKey,
- Term: val,
- Store: true,
- Index: toIndex,
++ Key: fieldKey,
+ Term: val,
+ Store: true,
++ Index: toIndex,
+ NoSort: r.GetNoSort(),
})
}
}
diff --cc pkg/index/index.go
index fdcb2c92,0b225581..11e6e379
--- a/pkg/index/index.go
+++ b/pkg/index/index.go
@@@ -208,15 -217,11 +213,16 @@@ func (s Series) String() string
return fmt.Sprintf("%s:%d", s.EntityValues, s.ID)
}
+// SortedField returns the value of the sorted field.
+func (s Series) SortedField() []byte {
+ return s.EntityValues
+}
+
// SeriesDocument represents a series document in an index.
type SeriesDocument struct {
- Fields map[string][]byte
- Key Series
+ Fields map[string][]byte
+ Timestamp int64
+ Key Series
}
// SeriesStore is an abstract of a series repository.
diff --cc pkg/index/inverted/inverted_series.go
index dcb8b3ed,dd02dd02..1f245c67
--- a/pkg/index/inverted/inverted_series.go
+++ b/pkg/index/inverted/inverted_series.go
@@@ -192,16 -152,19 +203,18 @@@ func parseResult(dmi search.DocumentMat
docIDMap[id] = struct{}{}
}
case entityField:
- fmt.Printf("entityField: %v\n", vv)
doc.Key.EntityValues = value
+ case timestampField:
+ ts, errTime := bluge.DecodeDateTime(value)
+ if errTime != nil {
+ return nil, err
+ }
+ doc.Timestamp = ts.UnixNano()
default:
- if _, ok := doc.Fields[field]; ok {
- doc.Fields[field] = bytes.Clone(value)
+ if _, ok := doc.Fields[fields[i]]; ok {
+ doc.Fields[fields[i]] = bytes.Clone(value)
}
}
- return true
- })
- if err != nil {
- return nil, errors.WithMessagef(err, "visit stored fields, hit: %d", hitNumber)
}
if doc.Key.ID > 0 {
result = append(result, doc)