Pull to refresh
56
0
Дмитрий @corax

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

Send message

Классное решение с параллельным сжатием, спасибо, что поделились.
Правильно я понял, что запись на диск 1гб заднимает 25+ сек, то есть скорость примерно 40мб/сек, при этом запись не сжатых данных происходит в 10 раз быстрее?
Если скорость критична, почему бы не убрать сжатие вовсе или делать это в фоне?
И ещё, у вас windows, скорее всего ntfs, в нём обычно уже включено сжатие, скорее всего менее эффективное, но возможно достаточное.

Классный пост, всё детально разобрано, хорошо оформлено.
В монге есть встроенный механизм балансировки, сдвига границ и миграции чанков. У вас с ним были проблемы?
Как фильтр, да. Но после фильтра всё таки нужен бакенд.
Отличная статься, спасибо!
Нет ли нарушения инкапсуляции insert() при проверке ошибки на *db.DBError? Что если сделать ретрай в insert()? Там где явно идёт обращение к бд.
Или внутри insert() обернуть ошибку во что то, что покажет пользователю insert() возможность ретрая, например RetryableError тип, или тип ошибки с дополнительным методом .IsRetryable().
непонятно есть ли смысл, но можно ещё немного ускорить замени easyjson на
github.com/francoispqt/gojay
1. В клике одинаковые значения в партах столбца по идее пожмутся в «почти ничего».
2. Если данные динамические, с документами проще конечно.
Самое простое, если <название метрики> немного, то можно насоздавать пачку столбцов.
Можно хитрее. Столбец для каждого типа данных и включить в ключ партиции <название метрики>, что бы хорошо пожалось и разложилось на диске.
Мне кажется функция isWord дана что бы увести от правильного решения.
*плюсую за префиксные деревья
Да, это дерево. Он должен найти все варианты-листья. Получается вроде O(N^2). Можно оптимизировать, добавить что то вроде динамичности, например так
With simple cache
получится O(N), это даст нам шанс дождаться ;) но не очень по памяти. И это можно оптимизировать, использовать указатели вместо строк – будет лучше, или ещё убрать стейт из стека, развернуть рекурсию в цикл и всё такое… Это оптимизации, но идея дерева так и останется в основе. :)
В решениях ошибка. Не учитываются варианты с ведущим 0.
Исправлено php
function fbi($a) {
	if (strlen($a) == 0) {
		return 1;
	}
	if ($a[0] == 0) {
		return 0;
	}
	$i = fbi(substr($a, 1));
	if ((strlen($a) > 1) and ((int)substr($a, 0, 2) <= 26)) {
		$i = $i + fbi(substr($a, 2));
	}
	return $i;
}
</spoiler>
Go
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
}


Запустить
Go Playground
PHP Playground
Задача 2. FBI
Деревом принятий решений, рекурсивно.
PHP
function fbi($a) {
	if (strlen($a) == 0) {
		return 1;
	}
	$i = fbi(substr($a, 1));
	if ((strlen($a) > 1) and ((int)substr($a, 0, 2) <= 26)) {
		$i = $i + fbi(substr($a, 2));
	}
	return $i;
}

Отличная идея! Но есть вопрос.
Что будет, если бд по какой то причине не сможет обновлять кеш некоторое время? Ведь в этом случае практически все клиенты вместо null будут получать «протухшие» значения, до тех пор пока не возобновится обновление. Возможно это допустимое поведение, но его нужно учитывать.
Спасибо за отличную статью! Мотивирует!
Было бы здорово, если бы вы прогнали тест с XFetch и дали бы возможность сравнить с остальными.
Блокировка перед началом выполнения операции пересчёта/ загрузки данных
function getContactsCountCached1(int $user_id) : ?int
	{
		$contacts_count = \Contacts\Cache::getContactsCount($user_id);
		if ($contacts_count !== false) {
			 return $contacts_count;
		}
		
		if ($lock->get() === true) {
			while($lock->get() === true){
				sleep(DB_TIME_OUT / 10); //wait n/10 sec
			}
			return getContactsCountCached($user_id);
		}
		
		$lock->lock(DB_TIMEOUT); // set on n sec
		$contacts_count = $this->getContactsCount($user_id, DB_TIMEOUT);
		$lock->unlock();
		if (is_null($contacts_count)) {
			 return null;
		}

		\Contacts\Cache::setContactsCount($user_id, $contacts_count);
		return $contacts_count;
	}

...TCP-порту

ААААА!!! И тут порты!

gramota.ru/slovari/dic/?word=порт&all=x
Тогда начиная со второй(Запрос изображения) весёлые картинки логически неправильные. :)
Эх, завернуть бы еще всё это в докер-файлы… Цены бы посту не было :)
А как же iTunes?
*AirPlay может не только стерео, можно передавать и dts, и dd, и даже pcm, что понимает рессивер.
уменьшаю, увеличиваю окно по ширине и всё едет :(
1
23 ...

Information

Rating
Does not participate
Location
Воронеж, Воронежская обл., Россия
Date of birth
Registered
Activity