Pull to refresh
16
0
Антон Шкуратов @neisbut

Пользователь

Send message

Отличная идея! Об этом способе я забыл, спасибо! Хотя у него есть существенный (для меня) недостаток: дело в том, что цены на бумаги могут поступать с опозданием и тогда условие для TradedOn должно быть не =, а <=. И также может потребоваться, чтобы вариант PriceSourceId был не один. В этом случае реализовать такой запрос, используя хэш будет сложно, если вообще возможно. А в MemoryJoin можно сделать это как обычно, например так:


код
var queryData = context.FromLocalList(reducedData);
var pricesQuery = from t in queryData
                  from p in context.Prices.Where(
                      x => x.Security.Ticker == t.Ticker &&
                      (x.PriceSourceId == t.PriceSourceId || x.PriceSourceId == 1) &&
                      x.TradedOn <= t.TradedOn)
                   .OrderByDescending(x => x.TradedOn)
                   .Take(1)
                  select p;
Да, SqlBulkCopy вполне может быть дополнением к способу 5, но не более. И, кстати, он вполне рабочий, но есть и недостатки (в статье они все перечислены).
В моем же случае было не применимо, потому что я использовал Postgres.
Хорошая идея, хотя думаю результат будет ожидаемым. Я пользовался Postgres, а там нет табличных параметров, но можно использовать jsonb. Для 64k элементов у меня получилось следующее:

MemoryJoin — 3871 s
StoredProc — 2505 s

Скрин



Да, у MSSQL ограничение 2100 параметров. Но дело в том, что можно передавать значения через параметры, а можно текстом (в теле запроса). Для этого у MemoryJoin есть переключатель — ViaParameters, ViaSqlQueryBody и Auto (default). В случае с Auto — он будет пытаться определить провайдера и количество необходимых параметров. И если это MSSQL и нужно < 2100 параметров — все значения будут переданы параметрами, если больше — будет внедрять прямо в тело запроса. Кстати в тестовой программе я использовал ViaSqlQueryBody, не смотря на то, что использовал Postgres.
Не совсем понял, о какой свалке речь? Последний вариант вообще не требует создания таблиц в базе.
Теперь сервисы такси хорошо автоматизированы, а среднее время подачи автомобиля Яндекс.Такси в Москве около 3-4 минут.
Душа радуется, когда читаешь такие вещи. Правда. Просто поделюсь: у нас в Томске среднее время подачи близится к никогда. Моя жена на этой неделе с 12 по 15 ноября заказывала такси 6 раз. А приехало оно только 1 раз. Она была согласна и на комфорт и на что угодно, лишь бы приехать вовремя. Но что-то пошло не так.
Эксперимент сразу намекает, что жениться не выгодно. 1800 против 1300 евро?
Такое ощущение, что статья не дооформлена что ли.
Честно говоря, слабовато.
В свое время делал нечто подобное, там можно было использовать Linq выражения в ячейках (типа: DataObject.SomeArray.First().SomeField и простейшая математика: SomeObject.A + SomeObject.B), колонки могли динамически добавляться, если происходил маппинг на свойство с типом, реализующий IDictionary, да много чего еще было…
Вдруг зритель в этот момент будет смотреть не на лицо главного героя а осматривать квартирку…

Или свою подружку :)

А если серьезно, а как в театре сейчас? Зритель в любой момент может отвлечься на что угодно. Что делать? — Играть хорошо :)
Все это понятно и прекрасно, только я не понял этого:
Писать руками ничего не нужно

А как? Может тогда это тема новой статьи?
Да, я думаю это знакомая схема для многих. Мы тоже долгое время работали со своим велосипедом на Rar-Sfx. Работало и работало хорошо до тех пор пока не потребовался откат. Да и писать манифесты… ммм… смотря какие, конечно.
PatchWiz это делает сам. К тому же патч умеет хранить не весь файл для обновления, а только его измененные части (!), что может прилично уменьшить его объем (но мы этим не пользуемся по разным причинам).

То что я описал в этой статье — это только база, во второй статье я опишу наш подход, он сильно облегчает эту задачу.
Благодарю, уже почти готово!

Information

Rating
Does not participate
Location
Томск, Томская обл., Россия
Date of birth
Registered
Activity