Search
Write a publication
Pull to refresh
1
0

User

Send message

Спасибо за статью, напомнило о весёлых временах...

Было очень познавательно узнать о структуре графа. Раньше для меня это была загадка, но теперь загадок не осталось. :)

Насколько я помню, мы не сталкивались с разбором графа, так как Нивал предоставил нам инструмент (GraphBuilder.exe) для его создания. А впоследствии мы внедрили автоматический вызов движка для создания графа из аддона, поэтому аддону не нужен отдельный граф для мобов. Если я, конечно, не ошибаюсь. :)

Будьте добры, выложите код на github.
1. В вашем случае, можно хранить целые числа в одной колонке, это уменьшит размер таблицы как минимум в два раза. Максимальное значение будет 675999999, и оно спокойно умещается в Integer. Кодировать числа в логины можно следующим образом:
Encode to integer
<?php
global $alpabet;
$alpabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

function encode($value) {
	global $alpabet;	
		
	$part3 = $value % 1000000;
	$value /= 1000000;
	
	$part2 = $alpabet[$value % strlen($alpabet)];
	$value /= strlen($alpabet);
		
	$part1 = $alpabet[$value % strlen($alpabet)];
	
 	return sprintf("%s%s%'.06d", $part1, $part2, $part3);
}

function decode($value) {
	global $alpabet;	
		
	$result = strpos($alpabet, $value[0]);
	$result *= strlen($alpabet);
	
	$result += strpos($alpabet, $value[1]);
	$result *= 1000000;
	
	$result += intval(substr($value, 2));
		
 	return $result;
}

echo decode("ZZ999999");
echo "<br>";
echo encode(675999999);
echo "<br>";
echo decode("BA999999");
echo "<br>";



2. Так же в глаза бросается проблема с concurrency.
Чем меньше будет оставаться записей в базе, тем больше вероятность того, что два потока смогут взять один и тот же логин.
Её можно решить, добавив проверку кода возврата при удалении логина. Т.е. нужно выбирать другой логин (делать retry) если удалить не получилось, значит этот логин уже взял другой поток.

Information

Rating
Does not participate
Location
Германия
Registered
Activity

Specialization

Fullstack Developer, Software Architect
Lead
English
C#
Object-oriented design
TypeScript
Assembler
C++