亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Elastic Search 中通過三個調用更新索引策略的文檔效率不高

在 Elastic Search 中通過三個調用更新索引策略的文檔效率不高

C#
千萬里不及你 2023-09-24 15:48:16
我有一個 AWS Elastic Search 服務器。使用映射模板和索引策略。{  "index_patterns": "users*",  "order": 6,  "version": 6,  "aliases": {    "users": {}  },  "settings": {    "number_of_shards": 5  },  "mappings": {    "_doc": {      "dynamic": "strict",      "properties": {        "id": { "type": "keyword" },        "emailAdress": { "type": "keyword" }      }    }  }}指數策略是{index_patterns}-{yyyy}-{MM}-{order}-{version}public async Task<Result> HandleEventAsync(UserChanged @event, CancellationToken cancellationToken){    // 1. Get User, I could get away with this call if Index was known and strategy not used    var userMaybe =        await _usersRepository.GetByIdAsync(@event.AggregateId.ToString(), cancellationToken);    if (userMaybe.HasValue)    {        var user = userMaybe.Value.User;        var partialUpdate = new        {            name = @event.Profile.Name,            birthDate = @event.Profile.BirthDate?.ToString("yyyy-MM-dd"),            gender = @event.Profile.Gender.ToString(),            updatedDate = DateTime.UtcNow,            updatedTimestampEpochInMilliseconds = EpochGenerator.EpochTimestampInMilliseconds(),        };        // 2. Remove fields with NULL values (if found any)        // 3. Partial or Full update of the document, in this case partial        var result = await _usersRepository.UpdateAsync(user.Id, partialUpdate, userMaybe.Value.Index, cancellationToken: cancellationToken);        return result.IsSuccess ? Result.Ok() : Result.Fail($"Failed to update User {user.Id}");    }    return Result.Fail("User doesn't exist");}因此,在這個方法中,我使用 SQS 消息,由于查找索引的原因,我從 Elastic Search 檢索文檔,因為我不明確知道它,使用以下方法刪除任何 NULL 字段,因為更新中的序列化程序將包含 NULL 值,然后部分更新文檔。這是 1 次更新的 3 個 Elastic Search 操作,我知道可以通過決定僅容忍文檔中的空值來刪除 NULL 值 UpdateByQuery 調用,但我們可能會面臨無法在需要時使用 Exists/NotExists 查詢這些字段的問題。我的問題是,如果我改變策略,對所有用戶文檔使用常量索引,這些文檔的數量并不多,目前也不會真正增長到數十億,我的彈性搜索、分片/索引的性能是否會受到影響ETC?
查看完整描述

1 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

是的。單個索引可以處理大量數據:您不需要將它們拆分得那么小。事實上,從性能角度來看,帶有小分片的小索引實際上更糟糕,因為它會導致每個節點有大量分片,從而消耗堆空間和開銷。

如果您定期收到大量數據,那么創建單個基于日期的索引是有意義的,因此也許只有該index_name-yyyyMMdd模式才有效。

最后,您始終可以使用通配符搜索所有索引。所以你可以通過查詢來搜索上面的內容index_name-*。在您現有的模式中,您可以執行相同的操作:index_patterns-*index_patterns-yyyy-*等。

查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 110 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號