А можете рассказать про механизм выбора пода по хэшу от ключа? У вас кол-во подов статичные или скейлится? Если скейлится то механизм адаптируется через какой то сервис дискавери или что то самописное?
Мы у себя используем HonkPerf.RefLinq - автор наш соотечественник) либа использует как раз ValueDelegates и структуры похожие на те что указаны в этой статье. Будет любопытно сравнить производительность этих 2х либ на наших кейсах
Современные процессоры поддерживают предвыборку данных (prefetch).
Если инструкции, загружающие данные из памяти в регистры, расположены близко друг к другу, процессор не будет выполнять их последовательно.
вот здесь я не понял- а что было сделано чтобы это выполнялось? т.е как будто пропущено что было измененов в Valkey- как -то по другому хэш таблицы стали хранить или что?
Отличная статья, спасибо! Я вот только не понял зачем надо было при объединении полей Status и IsDeleted забивать остаток как BoxId "для поднятия селективности". На сколько я понял BoxId итак уже есть в индексе как отдельное поле.
У меня была идея вместо того чтобы заворачивать переданный список в OPENJSON завернуть его в табличный параметр с юзер типом, скорее всего такое бы работало быстрее чем парсить json на стороне sql server. EF поддерживает такое если писать запрос через интерполированную скл строку (стрингом) если список преобразовать в дататейбл. но вот как добавить поддержку такого в linq я так и не разобрался... EF имеет точки расширения и внутренние тайп провайдеры, но что-то так и не вышло.
При удалении все последующие элементы смещаются и дальше в зависимости от места удаления относительно текущей позиции итерации- ты можешь один и тот же элемент проитерировать 2 раза или пропустить один из элементов.
Я не совсем понял кто «матчит» и вызывает валидатор для соотв. команды. интуиция подсказывает что медиатор, однако сначала сложилось впечатление что реализовывали мы интерфейсы из библиотеки флюент. Или IPipelineBehavior это из медиатора?
Спасибо за статью, один непонятный для меня момент:
почему мы добавляем исходных код атрибута в генераторе?
т.е непонятно как программист будет помечать этим атрибутом, если класс такого атрибута появится только на момент анализа кода.
Это крутая штука, я 2 года назад пытался прикрутить генератор на основе рослина и основной проблемой было как раз «встроиться» в шаги компиляции. В итоге все быглядело не так красиво как хотелось бы.
А вообще я мечтаю чтобы появились «генераторы» как конструкция языка.
Что-то типа макросов. чтобы можно было писать например как-то так: class A {
А можете рассказать про механизм выбора пода по хэшу от ключа? У вас кол-во подов статичные или скейлится? Если скейлится то механизм адаптируется через какой то сервис дискавери или что то самописное?
Спасибо за статью! Странно что подобного хендлера нет из коробки...
Мы у себя используем HonkPerf.RefLinq - автор наш соотечественник) либа использует как раз ValueDelegates и структуры похожие на те что указаны в этой статье. Будет любопытно сравнить производительность этих 2х либ на наших кейсах
Но устоявшийся "пул потоков" на "бассейн" автор таки заменил)))
Но если серьезно, то мне показалось это был юмор
вот здесь я не понял- а что было сделано чтобы это выполнялось? т.е как будто пропущено что было измененов в Valkey- как -то по другому хэш таблицы стали хранить или что?
ну так здесь же вообще можно на блок схемах кодить получается
WinForms это если вы хотите создавать формочки, а тут они из коробки, достаточно кинуть блок на схему. Мне кажется для детей самое оно
Отличная статья, спасибо! Я вот только не понял зачем надо было при объединении полей Status и IsDeleted забивать остаток как BoxId "для поднятия селективности". На сколько я понял BoxId итак уже есть в индексе как отдельное поле.
У меня была идея вместо того чтобы заворачивать переданный список в
OPENJSONзавернуть его в табличный параметр с юзер типом, скорее всего такое бы работало быстрее чем парсить json на стороне sql server. EF поддерживает такое если писать запрос через интерполированную скл строку (стрингом) если список преобразовать в дататейбл. но вот как добавить поддержку такого в linq я так и не разобрался... EF имеет точки расширения и внутренние тайп провайдеры, но что-то так и не вышло.Вижу есть примеры с параметризацией выражений
var value1 = "ln(1/-x1 + sqrt(1/(x2*x2) + 1))".Bind(new { x1, x2, sqrt, ln }).Evaluate();
в этом случае скомпилированное выражение закэшируется или будет парситься каждый раз?При удалении все последующие элементы смещаются и дальше в зависимости от места удаления относительно текущей позиции итерации- ты можешь один и тот же элемент проитерировать 2 раза или пропустить один из элементов.
Спасибо за статью!
каков будет результат если принудительно отключить инлайн методов? в реальной жизни далеко не все методы инлайнятся.
есть же старый добрый t4... даже консольное преложение не придется запускать, все доступно из вижал студии. он чем-то вам не подошел?
почему мы добавляем исходных код атрибута в генераторе?
т.е непонятно как программист будет помечать этим атрибутом, если класс такого атрибута появится только на момент анализа кода.
А вообще я мечтаю чтобы появились «генераторы» как конструкция языка.
Что-то типа макросов. чтобы можно было писать например как-то так:
class A {
bool Equals (A obj2){
<codegen.foreach(var fieldName in buildContext.thisClass.Fields) >
if(this.<codegen fieldName />!= obj2.<codegen fieldName />)
return false;
</codegen.foreach>
return true;
}
}
и на этапе компиляции этот макрос разворачивается.