Деревья на серваке

Moderator: Telakh


Shaman
 
Posts: 1
Joined: 16 Dec 2014, 16:31

Деревья на серваке

Post by Shaman » 16 Dec 2014, 16:35

Подскажите пожалуйста sql запрос на уменьшение общего колличесва деревье на сервере?

User avatar
Whitebear
 
Posts: 32
Joined: 16 Sep 2014, 05:26

Re: Деревья на серваке

Post by Whitebear » 16 Dec 2014, 16:57

Shaman wrote:Подскажите пожалуйста sql запрос на уменьшение общего колличесва деревье на сервере?



Берешь топор и идешь рубить )


Sfinks
 
Posts: 13
Joined: 29 Dec 2014, 08:36

Re: Деревья на серваке

Post by Sfinks » 29 Dec 2014, 11:47

А если серьезно? В базе есть forest в котором очень много деревьем <40Q которых при желание хотелось бы удалить.
Есть ли какое нибудь рациональное решение этому?
Это не только поможет в развитие но и так же думаю повысить производительность и скорость сервера за счет уменьшения нагрузки на него.
И всего что нашел известно, что простое удаление из базы привело к тому что пропали все деревья на сервере :crazy:


DiWorm
 
Posts: 90
Joined: 22 Sep 2014, 04:58

Re: Деревья на серваке

Post by DiWorm » 15 Jan 2015, 06:42

Sfinks wrote:А если серьезно? В базе есть forest в котором очень много деревьем <40Q которых при желание хотелось бы удалить.
Есть ли какое нибудь рациональное решение этому?
Это не только поможет в развитие но и так же думаю повысить производительность и скорость сервера за счет уменьшения нагрузки на него.
И всего что нашел известно, что простое удаление из базы привело к тому что пропали все деревья на сервере :crazy:

Заходишь такой в базу, пишешь запрос SELECT * FROM tbl_name WHERE quality_tbl <= 40 и удаляешь :) и да, не забудь про бекапы.

А по факту, удалять по квалити = плохо. Нужен адекватный и быстрый скрипт на выборку , например 30% базы деревьев и удаления ее.


Arhi
True Believer
 
Posts: 11
Joined: 03 Oct 2014, 07:49

Re: Деревья на серваке

Post by Arhi » 15 Jan 2015, 10:30

DiWorm wrote:А по факту, удалять по квалити = плохо. Нужен адекватный и быстрый скрипт на выборку , например 30% базы деревьев и удаления ее.


Удалять по forest quality = хорошо.
до 30-ки качества деревья не представляют особую значимость, а fps подрастет.
Визуально конечно лес проредиться, но не критично. Он все так же и останется лесом, только опушки гор немного полысеют. Хотя и удалятся примерно 75% всех деревьев.

тем более лес себя продолжит восполнять.

И удалять нужно из tbl forest и также:
1. либо записывать в tbl forest_patch строчку об удалении используя функцию f_addForestPatch (которая автоматом сделает update terrain_blocks )
2. либо удалять строчку(если forest quality=0 то 2 строчки) в tbl forest_patch и проводить пересчет версий и делать update terrain_blocks


AleksPlayer
 
Posts: 34
Joined: 08 Feb 2014, 20:24

Re: Деревья на серваке

Post by AleksPlayer » 16 Jan 2015, 11:11

А заодно подскажите, плз, как их правильно высаживать :).
Что, вообще, нужно, что бы деревья росли (кроме их ростков:))? Высаживаю ростки яблони, показываются маленькие деревца, и всё... Они такими и остаются сутки, двое и так далее. Я что то не учитываю? Можно "просто" высаживать или почву готовить специальную для этого на месте будущей посадки (плодородную, лесную и т.д.)?


DiWorm
 
Posts: 90
Joined: 22 Sep 2014, 04:58

Re: Деревья на серваке

Post by DiWorm » 16 Jan 2015, 13:26

Arhi wrote:
DiWorm wrote:А по факту, удалять по квалити = плохо. Нужен адекватный и быстрый скрипт на выборку , например 30% базы деревьев и удаления ее.


Удалять по forest quality = хорошо.
до 30-ки качества деревья не представляют особую значимость, а fps подрастет.
Визуально конечно лес проредиться, но не критично. Он все так же и останется лесом, только опушки гор немного полысеют. Хотя и удалятся примерно 75% всех деревьев.

тем более лес себя продолжит восполнять.

И удалять нужно из tbl forest и также:
1. либо записывать в tbl forest_patch строчку об удалении используя функцию f_addForestPatch (которая автоматом сделает update terrain_blocks )
2. либо удалять строчку(если forest quality=0 то 2 строчки) в tbl forest_patch и проводить пересчет версий и делать update terrain_blocks


Может вы полноценный рабочий скрипт выложите, как товарищ выкладывал для пеньков?


Ziong18
 
Posts: 107
Joined: 09 Oct 2014, 03:48

Re: Деревья на серваке

Post by Ziong18 » 18 Jan 2015, 11:41

Лови! ;)

Code: Select all
DELETE forest, forest_patch
FROM forest, forest_patch
WHERE forest.GeoDataID = forest_patch.GeoDataID  AND
      forest.Quality < 80;

SET @c442 = 1;
SET @c443 = 1;
SET @c444 = 1;
SET @c445 = 1;
SET @c446 = 1;
SET @c447 = 1;
SET @c448 = 1;
SET @c449 = 1;
SET @c450 = 1;

UPDATE forest_patch
SET Version = @c442:=@c442+1
WHERE TerID = 442;

UPDATE forest_patch
SET Version = @c443:=@c443+1
WHERE TerID = 443;

UPDATE forest_patch
SET Version = @c444:=@c444+1
WHERE TerID = 444;

UPDATE forest_patch
SET Version = @c445:=@c445+1
WHERE TerID = 445;

UPDATE forest_patch
SET Version = @c446:=@c446+1
WHERE TerID = 446;

UPDATE forest_patch
SET Version = @c447:=@c447+1
WHERE TerID = 447;

UPDATE forest_patch
SET Version = @c448:=@c448+1
WHERE TerID = 448;

UPDATE forest_patch
SET Version = @c449:=@c449+1
WHERE TerID = 449;

UPDATE forest_patch
SET Version = @c450:=@c450+1
WHERE TerID = 450;

SET @c442 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 442 ORDER BY TerID);
SET @c443 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 443 ORDER BY TerID);
SET @c444 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 444 ORDER BY TerID);
SET @c445 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 445 ORDER BY TerID);
SET @c446 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 446 ORDER BY TerID);
SET @c447 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 447 ORDER BY TerID);
SET @c448 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 448 ORDER BY TerID);
SET @c449 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 449 ORDER BY TerID);
SET @c450 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 450 ORDER BY TerID);

UPDATE terrain_blocks
SET ForestVersion = @c442
WHERE ID = 442;

UPDATE terrain_blocks
SET ForestVersion = @c443
WHERE ID = 443;

UPDATE terrain_blocks
SET ForestVersion = @c444
WHERE ID = 444;

UPDATE terrain_blocks
SET ForestVersion = @c445
WHERE ID = 445;

UPDATE terrain_blocks
SET ForestVersion = @c446
WHERE ID = 446;

UPDATE terrain_blocks
SET ForestVersion = @c447
WHERE ID = 447;

UPDATE terrain_blocks
SET ForestVersion = @c448
WHERE ID = 448;

UPDATE terrain_blocks
SET ForestVersion = @c449
WHERE ID = 449;

UPDATE terrain_blocks
SET ForestVersion = @c450
WHERE ID = 450;


DiWorm
 
Posts: 90
Joined: 22 Sep 2014, 04:58

Re: Деревья на серваке

Post by DiWorm » 19 Jan 2015, 07:21

Ziong18 wrote:Лови! ;)

Code: Select all
DELETE forest, forest_patch
FROM forest, forest_patch
WHERE forest.GeoDataID = forest_patch.GeoDataID  AND
      forest.Quality < 80;

SET @c442 = 1;
SET @c443 = 1;
SET @c444 = 1;
SET @c445 = 1;
SET @c446 = 1;
SET @c447 = 1;
SET @c448 = 1;
SET @c449 = 1;
SET @c450 = 1;

UPDATE forest_patch
SET Version = @c442:=@c442+1
WHERE TerID = 442;

UPDATE forest_patch
SET Version = @c443:=@c443+1
WHERE TerID = 443;

UPDATE forest_patch
SET Version = @c444:=@c444+1
WHERE TerID = 444;

UPDATE forest_patch
SET Version = @c445:=@c445+1
WHERE TerID = 445;

UPDATE forest_patch
SET Version = @c446:=@c446+1
WHERE TerID = 446;

UPDATE forest_patch
SET Version = @c447:=@c447+1
WHERE TerID = 447;

UPDATE forest_patch
SET Version = @c448:=@c448+1
WHERE TerID = 448;

UPDATE forest_patch
SET Version = @c449:=@c449+1
WHERE TerID = 449;

UPDATE forest_patch
SET Version = @c450:=@c450+1
WHERE TerID = 450;

SET @c442 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 442 ORDER BY TerID);
SET @c443 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 443 ORDER BY TerID);
SET @c444 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 444 ORDER BY TerID);
SET @c445 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 445 ORDER BY TerID);
SET @c446 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 446 ORDER BY TerID);
SET @c447 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 447 ORDER BY TerID);
SET @c448 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 448 ORDER BY TerID);
SET @c449 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 449 ORDER BY TerID);
SET @c450 = (SELECT Max(Version) as max FROM forest_patch WHERE TerID = 450 ORDER BY TerID);

UPDATE terrain_blocks
SET ForestVersion = @c442
WHERE ID = 442;

UPDATE terrain_blocks
SET ForestVersion = @c443
WHERE ID = 443;

UPDATE terrain_blocks
SET ForestVersion = @c444
WHERE ID = 444;

UPDATE terrain_blocks
SET ForestVersion = @c445
WHERE ID = 445;

UPDATE terrain_blocks
SET ForestVersion = @c446
WHERE ID = 446;

UPDATE terrain_blocks
SET ForestVersion = @c447
WHERE ID = 447;

UPDATE terrain_blocks
SET ForestVersion = @c448
WHERE ID = 448;

UPDATE terrain_blocks
SET ForestVersion = @c449
WHERE ID = 449;

UPDATE terrain_blocks
SET ForestVersion = @c450
WHERE ID = 450;


Интересный скрипт, можно поподробнее о значениях наичнающихся с @? Что это?


Arhi
True Believer
 
Posts: 11
Joined: 03 Oct 2014, 07:49

Re: Деревья на серваке

Post by Arhi » 19 Jan 2015, 09:53

DiWorm wrote:
Интересный скрипт, можно поподробнее о значениях наичнающихся с @? Что это?


Да обычная переменная для счетчика.
просто кто то, не заморачивался насчет циклов :)


DiWorm
 
Posts: 90
Joined: 22 Sep 2014, 04:58

Re: Деревья на серваке

Post by DiWorm » 19 Jan 2015, 19:14

Спасибо, потестил, после работы скрипта на удаление деревьев ниже 40 квалити - было затрону 550 000 строк :D

но сервер стал рестартится 7 минут, вместо прошлых 50...


Sfinks
 
Posts: 13
Joined: 29 Dec 2014, 08:36

Re: Деревья на серваке

Post by Sfinks » 19 Jan 2015, 22:04

Извините за глупый вопрос. Но как применить его на практике. Просто я с бд никогда до этого не работал.


DiWorm
 
Posts: 90
Joined: 22 Sep 2014, 04:58

Re: Деревья на серваке

Post by DiWorm » 20 Jan 2015, 05:31

Sfinks wrote:Извините за глупый вопрос. Но как применить его на практике. Просто я с бд никогда до этого не работал.

Если у тебя сервер на венде, то достаточно просто.

1. открывай CMD (WIN+R -> cmd.exe)
В ней пиши: cd C:\Program Files\MariaDB 10.0\bin(тут путь до твоей БД), далее mysqldump.exe lif_X > C:\dump.sql
(где X номер твоей базы, по умолчанию 1)
Так ты сделаешь бекап.

Открываешь HeidiSQL(идет в комплекте с MariaDB , подключаешься к базе, открываешь окно базы lif_X, выбираешь вкладку SQL-запрос, вставляешь туда запрос , который был чуть выше и ПКМ на белом фоне - запустить. Ждешь, процесс не быстрый.

Не забудь в запросе изменить цифру 80, которая отвечает за квалити на свою.

В случае чего, востановить бекап можно mysqldump.exe lif_X < C:\dump.sql


Krinym
True Believer
 
Posts: 206
Joined: 04 Nov 2013, 05:50

Re: Деревья на серваке

Post by Krinym » 20 Jan 2015, 08:23

Подскажите. Запустил новй сервер, использовал скрипт и теперь вещи не выкидываются и при строительстве постройки не ставятся, а земля куда должны были поставится становится красной (клетки блокируются)
Image


Krinym
True Believer
 
Posts: 206
Joined: 04 Nov 2013, 05:50

Re: Деревья на серваке

Post by Krinym » 20 Jan 2015, 08:31

перезагрузил вещи стали выкидываться но не строит ничего и клотки блочатся как исправить?
Image


MrBochik
 
Posts: 2
Joined: 03 Apr 2015, 16:25

Re: Деревья на серваке

Post by MrBochik » 23 May 2015, 20:11

Подскажите как применить данный скрипт если сервер у меня на пк и нету mariadb ?


Kinrara
 
Posts: 3
Joined: 10 May 2016, 13:09

Re: Деревья на серваке

Post by Kinrara » 14 May 2016, 14:29

Arhi wrote:
DiWorm wrote:
Интересный скрипт, можно поподробнее о значениях наичнающихся с @? Что это?


Да обычная переменная для счетчика.
просто кто то, не заморачивался насчет циклов :)


Добавил это скрипт в path.sql чет не помогло) Чтото не так сделал?

User avatar
Malkom
Beta Tester
 
Posts: 50
Joined: 30 Sep 2014, 11:08

Re: Деревья на серваке

Post by Malkom » 14 May 2016, 18:31

Kinrara wrote:Добавил это скрипт в path.sql чет не помогло) Чтото не так сделал?

path.sql - а зачем туда?
Делай как сказано через хайди, ну или на крайний случай добавить в dump.sql который лежит в папках самого сервера, в данном случае скрип будет выполняться каждый раз при запуске.

З.ы. Напомню все манипуляции с БД выполнять при выключеном сервере, во избежании проблем :-)
Image

Return to Технические вопросы

cron