Классное решение с параллельным сжатием, спасибо, что поделились. Правильно я понял, что запись на диск 1гб заднимает 25+ сек, то есть скорость примерно 40мб/сек, при этом запись не сжатых данных происходит в 10 раз быстрее? Если скорость критична, почему бы не убрать сжатие вовсе или делать это в фоне? И ещё, у вас windows, скорее всего ntfs, в нём обычно уже включено сжатие, скорее всего менее эффективное, но возможно достаточное.
Классный пост, всё детально разобрано, хорошо оформлено.
В монге есть встроенный механизм балансировки, сдвига границ и миграции чанков. У вас с ним были проблемы?
Отличная статься, спасибо!
Нет ли нарушения инкапсуляции insert() при проверке ошибки на *db.DBError? Что если сделать ретрай в insert()? Там где явно идёт обращение к бд.
Или внутри insert() обернуть ошибку во что то, что покажет пользователю insert() возможность ретрая, например RetryableError тип, или тип ошибки с дополнительным методом .IsRetryable().
1. В клике одинаковые значения в партах столбца по идее пожмутся в «почти ничего».
2. Если данные динамические, с документами проще конечно.
Самое простое, если <название метрики> немного, то можно насоздавать пачку столбцов.
Можно хитрее. Столбец для каждого типа данных и включить в ключ партиции <название метрики>, что бы хорошо пожалось и разложилось на диске.
Да, это дерево. Он должен найти все варианты-листья. Получается вроде O(N^2). Можно оптимизировать, добавить что то вроде динамичности, например так With simple cache
получится O(N), это даст нам шанс дождаться ;) но не очень по памяти. И это можно оптимизировать, использовать указатели вместо строк – будет лучше, или ещё убрать стейт из стека, развернуть рекурсию в цикл и всё такое… Это оптимизации, но идея дерева так и останется в основе. :)
package main
import (
"fmt"
"strconv"
)
func main() {
u := fbi("121212")
fmt.Println(u)
}
func fbi(a string) int {
if len(a) == 0 {
return 1
}
i := fbi(a[1:])
if len(a) > 1 {
n, _ := strconv.Atoi(a[:2])
if n <= 26 {
i = i + fbi(a[2:])
}
}
return i
}
Отличная идея! Но есть вопрос.
Что будет, если бд по какой то причине не сможет обновлять кеш некоторое время? Ведь в этом случае практически все клиенты вместо null будут получать «протухшие» значения, до тех пор пока не возобновится обновление. Возможно это допустимое поведение, но его нужно учитывать.
Классное решение с параллельным сжатием, спасибо, что поделились.
Правильно я понял, что запись на диск 1гб заднимает 25+ сек, то есть скорость примерно 40мб/сек, при этом запись не сжатых данных происходит в 10 раз быстрее?
Если скорость критична, почему бы не убрать сжатие вовсе или делать это в фоне?
И ещё, у вас windows, скорее всего ntfs, в нём обычно уже включено сжатие, скорее всего менее эффективное, но возможно достаточное.
В монге есть встроенный механизм балансировки, сдвига границ и миграции чанков. У вас с ним были проблемы?
Нет ли нарушения инкапсуляции insert() при проверке ошибки на *db.DBError? Что если сделать ретрай в insert()? Там где явно идёт обращение к бд.
Или внутри insert() обернуть ошибку во что то, что покажет пользователю insert() возможность ретрая, например RetryableError тип, или тип ошибки с дополнительным методом .IsRetryable().
github.com/francoispqt/gojay
2. Если данные динамические, с документами проще конечно.
Самое простое, если <название метрики> немного, то можно насоздавать пачку столбцов.
Можно хитрее. Столбец для каждого типа данных и включить в ключ партиции <название метрики>, что бы хорошо пожалось и разложилось на диске.
*плюсую за префиксные деревья
With simple cache
получится O(N), это даст нам шанс дождаться ;) но не очень по памяти. И это можно оптимизировать, использовать указатели вместо строк – будет лучше, или ещё убрать стейт из стека, развернуть рекурсию в цикл и всё такое… Это оптимизации, но идея дерева так и останется в основе. :)
Запустить
Go Playground
PHP Playground
Деревом принятий решений, рекурсивно.
Что будет, если бд по какой то причине не сможет обновлять кеш некоторое время? Ведь в этом случае практически все клиенты вместо null будут получать «протухшие» значения, до тех пор пока не возобновится обновление. Возможно это допустимое поведение, но его нужно учитывать.
Было бы здорово, если бы вы прогнали тест с XFetch и дали бы возможность сравнить с остальными.
ААААА!!! И тут порты!
gramota.ru/slovari/dic/?word=порт&all=x
*AirPlay может не только стерео, можно передавать и dts, и dd, и даже pcm, что понимает рессивер.