Использование в Sas.Планета кеша в формате Berkeley

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

Аватара пользователя
svp
Советчик
Сообщения: 447
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раза
Поблагодарили: 7 раз
Контактная информация:

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение svp »

Прошу прощения за создавшуюся неразбериху. Я просто отделил от этой темы ветку
HTTP-сервер-обменник для тайлового кеша
Теперь здесь обсуждаем беркли, а там сервер.
rokki
Соображающий
Сообщения: 68
Зарегистрирован: 28 ноя 2008, 21:57

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение rokki »

Сделайте привязку к mysql (могу дать вам компоненты для Дельфи) и храните в базе индекс кеша, а сам кеш на фтп который будет на том же хосте. А хост - мордой в интернет.

В Mysql кроме индекса кеша можно хранить и иметь ОБЩИЙ ДОСТУП К:

1. Настройкам на карты
2. Точкам
3. Трекам
4. Текущему положению GPS координат пользователя по его желанию при включенном приемнике. (Реализация на подобие session таблицы )
5. ...
6. ...
7. ...

Кроме того, хостер этой базы и фтп может прикрутить эту базу к сайту, на котором можно отражать сию информацию тоже)))

[!} MODERATED:OFFTOPIC
Аватара пользователя
vdemidov
Гуру
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз
Поблагодарили: 157 раз

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение vdemidov »

Прошу прощения,rokki но обратите внимания, что единственный автор программы feya, а остальные к ней имеют весьма опосредованное отношение. То что вы предлагаете нужно реализовывать самому автору. Причем это довольно сложный кусок работы. А то что обсуждали остальные можно прикрутить с минимальным вмешательством в саму программу.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
rokki
Соображающий
Сообщения: 68
Зарегистрирован: 28 ноя 2008, 21:57

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение rokki »

vdemidov писал(а):Прошу прощения,rokki но обратите внимания, что единственный автор программы feya, а остальные к ней имеют весьма опосредованное отношение. То что вы предлагаете нужно реализовывать самому автору. Причем это довольно сложный кусок работы. А то что обсуждали остальные можно прикрутить с минимальным вмешательством в саму программу.


Уважаемый vdemidov, насколько я понял этот форум предназначен для обсуждения именно функционала программы а не стороннего софта который можно к ней прикрутить ...
Аватара пользователя
Parasite
Администратор
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раза
Поблагодарили: 508 раз

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение Parasite »

rokki писал(а):
vdemidov писал(а):Прошу прощения,rokki но обратите внимания, что единственный автор программы feya, а остальные к ней имеют весьма опосредованное отношение. То что вы предлагаете нужно реализовывать самому автору. Причем это довольно сложный кусок работы. А то что обсуждали остальные можно прикрутить с минимальным вмешательством в саму программу.

Уважаемый vdemidov, насколько я понял этот форум предназначен для обсуждения именно функционала программы а не стороннего софта который можно к ней прикрутить ...

FTP, MySQL и хостера (предлагаемые Вами) довольно сложно назвать "именно функционалом программы"©.
Заканчиваем флеймить, плиз. Есть идеи по сабжу - в студию, нет - читаем следующую тему.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
rokki
Соображающий
Сообщения: 68
Зарегистрирован: 28 ноя 2008, 21:57

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение rokki »

Беркли можно, но оно нужно только для локального кеша.... да и то вряд ли.. Объединение беркли баз займет столько же времени как просто копирование локального кеша или не существенно быстрее....
Смысл ? Делать обмен кешем на беркли - вообще бред. Документации нет, интерфейса нет, возможностей где то еще использовать нет, ничего нет... Ну если только для того чтобы кодеру жизнь медом не казалась... Смысл кодить поддержку формату который узко используется?

[!] MODERATED:OFFTOPIC
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение zed »

Поставил эксперемент с MySQL:
- создал базу с индексами по x, y, zoom, MapType, TileVer (индексы отдельные, без primary ключа);
- заполнил базу тайлом 21,5 kB. Тайл сохранял в поле MediumBlob, а x, y, zoom, MapType, TileVer для каждой записи генерировал случайным образом (для каждой переменной было созадано ограничение на max значение: для zoom, MapType, TileVer - 0..24; для x, y - 0..16 000 000);
Получил базу в ~155 тыс. записей, размером 3.18ГБ, с индексом 9МБ. Скорость заполнения базы составила 300-350 тайлов/сек (тайл загружался в память перед началом записи).
Вот. А потом выполнил запрос на тайл по x, y, zoom, MapType, TileVer - время запроса составило: 0.0018 сек. (если тайл небыл найден в базе) или 0.0033 сек. (если тайл находился в базе). А полная операция получения тайла (соединение с базой, поиск и передача данных в браузер) длилась от 0.017 до 0.047 сек.
Всё это делал через php и MySQL из пакета Denver. (Если всё делать из проги, а не из скриптов/браузеров и проч. наверное должно быть быстрее?)
Результат, по-моему, не плохой. Будет время, попробую наполнить базу гигов до 40-60, посмотреть что выйдет :)
Надо разобраться с Беркли + php, глянуть какое там будет быстродействие. Если у кого есть скрипты, поделИтесь?

P.S. Эх, как-то сразу не сообразил сделать выборку тайла скриптом из существующего кэша SAS, а то эксперемент и сравнить-то не с чем...
Аватара пользователя
Vasya
Советчик
Сообщения: 266
Зарегистрирован: 14 июл 2008, 13:06
Откуда: Одесса
Поблагодарили: 3 раза
Контактная информация:

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение Vasya »

полная операция получения тайла (соединение с базой, поиск и передача данных в браузер) длилась от 0.017 до 0.047 сек.

На колько я понимаю, всё это для одного тайла. А одновремено на экране находится более 10 тайлов.
Можно ли узнать время получения, допустим 20-ти тайлов ?
Аватара пользователя
svp
Советчик
Сообщения: 447
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раза
Поблагодарили: 7 раз
Контактная информация:

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение svp »

zed писал(а):Надо разобраться с Беркли + php, глянуть какое там будет быстродействие.

Беркли будет быстрее. Её используют даже для реализации самих методов хранения в базе MySQL. Насколько я понял из описания беркли.

Выгрузи в скрипт базу без данных, пожалуйста. Я затяну туда свои 25 гигов кеша и попробую покрутить их дельфей (без скриптов) на реальных выборках.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение zed »

Vasya писал(а):
полная операция получения тайла (соединение с базой, поиск и передача данных в браузер) длилась от 0.017 до 0.047 сек.

На колько я понимаю, всё это для одного тайла. А одновремено на экране находится более 10 тайлов.
Можно ли узнать время получения, допустим 20-ти тайлов ?

Ну, поскольку для получения 20 тайлов будет сформировано 20 запросов (причём последовательно, т.к. в SAS нет многопоточности)- то время соответственно раз в 20 возрастёт. При многопоточности запросов, возможно, будет немного (или намного?) быстрее, но как это протестировать чисто скриптами я не знаю. Запустить что ли 20 страничек в браузере и поставить на автообновление?

svp писал(а):Выгрузи в скрипт базу без данных, пожалуйста. Я затяну туда свои 25 гигов кеша и попробую покрутить их дельфей (без скриптов) на реальных выборках.

Вот скрипт, которым я загонял данные в базу:

Код: Выделить всё

<?php 

/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "TailBase";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "main";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");

/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());   

/* чтение тайла в память */
$file_name = "c:/test/kh.google.com/flatfile/Image/19/trtqrqs.jpg";
$data = file_get_contents($file_name);
$data = addslashes($data);

echo "Добавляем 5 000 записей в базу данных.<br>";
 
$time_start = microtime(1);

for ($i=0; $i< 5000; $i++) {

$x=mt_rand(0,16000000);
$y=mt_rand(0,16000000);
$ver=mt_rand(0,255);
$z=mt_rand(0,24);
$mt=mt_rand(0,255);

/* составить запрос для вставки информации о клиенте в таблицу */
$query = "INSERT INTO $userstable (Ver,X,Y,Z,MapT,Data) VALUES ($ver,$x,$y,$z,$mt,'$data')";

/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());         

}
 
$time_end = microtime(1);
$time = $time_end - $time_start;

echo "Время операции: $time секунд\n";
echo "<br>";

/* Закрыть соединение */
mysql_close();
?>

А этот, для получения (в браузере тайл отображается как текст):

Код: Выделить всё

<?php 
$time_start = microtime(1);

/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "TailBase";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "main";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");

/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());   
 

 $LookX =0;
 $LookY =0;
 $LookZ =1;
 $LookMapT =1;
 
echo "Поиск по базе данных: X=$LookX and Y=$LookY and Z=$LookZ and MapT=$LookMapT<BR>"; 

$query = "SELECT * FROM $userstable WHERE X=$LookX and Y=$LookY and Z=$LookZ and MapT=$LookMapT";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
 
/* Как много нашлось таких */
$number = mysql_num_rows($res);

/* Напечатать всех в красивом виде*/
if ($number == 0) {
  echo "Нет данных в базе<BR>";
} else {
  echo "В базе: $number записи<BR>";

  /* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */ 
  while ($row=mysql_fetch_array($res)) {
    echo "X=".$row[X]."<BR>";
    echo "Y= ".$row[Y]."<BR>";
    echo "Z= ".$row[Y]."<BR>";
    echo "MapT= ".$row[MapT]."<BR>";
    echo "Data= ".$row[Data]."<BR>";   
    echo "<BR><BR>";
  }
  echo "</CENTER>";
}

$time_end = microtime(1);
$time = $time_end - $time_start;

echo "Время запроса: $time секунд\n";

 /* Закрыть соединение */
mysql_close();
?>


Пустую базу прикрепил.
Данные для соединения: Имя - TailBase; Таблица - main; Юзер - root; Пароль отсутствует. Все переменные имеют тип int, кроме Data - mediumblob (размер поля до 16МБ).
Ответить

Вернуться в «SAS.Планета»