Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: JSON база данных
Форумы портала PHP.SU » Объявления » Наработки по собственным проектам » JSON база данных

Страниц (2): [1] 2 »
 

1. Crate - 28 Июня, 2012 - 09:45:21 - перейти к сообщению
Всем привет. Это как бы еще не база, но выполняет некоторые ее функции.

Установка.
1. Подключите файл ds.php из папки lib в свое приложение.
2. Создайте объект класса DS ($var = new DS (путь до БД)), и укажите путь до папки БД (она должна быть пуста).

Методы.
1. clean (данные) - очищает данные от опасных символов.
2. create (имя нновой таблицы) - создает новую таблицу (если ее нет).
3. delete (запись, таблица) - удаляет запись в таблице (если есть).
4. drop (таблица) - очищает и удаляет таблицу.
5. exists (имя, тип = таблица) - проверяет на существование.
Пример: 1. exists (array ('запись', 'таблица'), 'item'); 2. exists ('таблица', 'item');
6. get (поля = все, запись, таблица) - возвращает данные.
7. getConfig (таблица) - возвращает информацию о таблице.
8. merge (array (таблицы), имя = имя первой таблицы) - соединяет таблицы в одну (новое имя = "имя").
9. put (данные, имя, таблица) - создает новую запись, если ее нет.
10. search (текст, таблица) - возвращаят массив записей, содержащих "текст".
11. set (данные, имя, таблица) - обновляет данные в записи, если она есть.
12. truncate (таблица) - очищает таблицу, если она есть.
13. version () - возвращает версию DS.
Скоро добавлю описание к остальным.
2. eai - 28 Июня, 2012 - 09:49:17 - перейти к сообщению
А зачем ?
3. Crate - 28 Июня, 2012 - 09:55:53 - перейти к сообщению
eai такого нет.
(Добавление)
А также для саморазвития.
4. DeepVarvar - 28 Июня, 2012 - 10:03:44 - перейти к сообщению
Crate, такое есть: noSQL, mongoDB, memcache

А ваша штука может быть полезной, я не смотрел код, вы в файл пишете JSON?
Тогда будет менее накладным держать в файле чистые сериализованные данные, с ними и работать внутри, и только по внешнему запросу типа SELECT отдавать в формате JSON.
5. Crate - 28 Июня, 2012 - 10:07:54 - перейти к сообщению
DeepVarvar пишет:
вы в файл пишете JSON?
да, а отдаю десериализованные данные.

DeepVarvar пишет:
по внешнему запросу типа SELECT отдавать в формате JSON
Это я уже реализую в следующих версиях в виде API.
6. DeepVarvar - 28 Июня, 2012 - 11:18:26 - перейти к сообщению
Crate пишет:
да, а отдаю десериализованные данные.
Либо вы не поняли, либо не понял я. Повторю другими словами, правильнее всего будет так:
PHP:
скопировать код в буфер обмена
  1. // промежуточные данные для работы
  2. $data = array("...etc...");
  3. // сохранение
  4. file_put_contents($datafile, serialize($data));
  5. // выборка
7. Crate - 28 Июня, 2012 - 11:37:45 - перейти к сообщению
DeepVarvar пишет:
PHP:
А зачем делать так? Я имел ввиду API для удаленной работы с базой.
8. Crate - 05 Июля, 2012 - 16:36:17 - перейти к сообщению
Обновил первый пост. Протестируйте, пожалуйста.
9. DeepVarvar - 05 Июля, 2012 - 18:23:12 - перейти к сообщению
Я тут потестил кой чего:
PHP:
скопировать код в буфер обмена
  1. class test {
  2.  
  3.   private $property = null;
  4.  
  5.   public function setProperty($value) {
  6.     $this->property = $value;
  7.   }
  8.  
  9.   public function getProperty() {
  10.     return $this->property;
  11.   }
  12.  
  13. }
  14.  
  15.  
  16. $data = array();
  17. for ($clone = 0; $clone < 1000000; $clone++) {
  18.   $obj = new test();
  19.   $obj->setProperty($clone);
  20.   $data["clone" . $clone] = $obj;
  21. }
  22.  
  23. $start = microtime(true);
  24.  
  25. echo '--- serialize ---------' . PHP_EOL; $data = serialize($data);
  26. //echo '--- json_encode -------' . PHP_EOL; $data = json_encode($data);
  27.  
  28. $finish = microtime(true);
  29. echo 'diff: ' . ($finish - $start) . PHP_EOL;

Сериалайз:
Спойлер (Отобразить)

json:
Спойлер (Отобразить)

Выходит лучше юзать json и писать в файл в нем.
10. caballero - 05 Июля, 2012 - 18:35:36 - перейти к сообщению
CouchDB
хранит данные в json
вьюшки, или как они там называются пишутся на яваскрипте
на нем же написан встроееный вебинтерфейс гда прямо из него можно править Бд.
11. Мелкий - 05 Июля, 2012 - 19:05:36 - перейти к сообщению
DeepVarvar пишет:
Я тут потестил кой чего:

Есть одна проблемка. {"clone0":{},"clone1":{},"clone2":{},"clone3":{},"clone4":{},"clone5":{},"clone6":{},"clone7":{},"clone8":{},"clone9":{}...}
$property-то где? А нет его, потеряли. Восстанавливается обратно пустой stdObject.

Но на простых массивах JSON ощутимо быстрее, в 2 раза на записи, на чтении - почти на порядок.
12. Crate - 05 Июля, 2012 - 22:19:44 - перейти к сообщению
Мелкий пишет:
Но на простых массивах JSON ощутимо быстрее, в 2 раза на записи, на чтении - почти на порядок.
Он еще и читаем людьми.
13. DeepVarvar - 06 Июля, 2012 - 01:05:38 - перейти к сообщению
Мелкий пишет:
Есть одна проблемка
Да я только ради неё и писал методы в клонах, вот только о самой проблемке сказать вылетело из головы Радость
А простые массивы да - быстрее, ну на то она и "база" в простом виде без процедур кстати только данные и хранит, а инструмент для её модификации живет отдельно.

Тут таки можно поприкалываться с memcache, он то данные какраз сериализует, а не json'ит. Це - готовый инструмент, чо велосипеды то строить?

Можно пойти и еще дальше, у мемкеша нет (ну не было в той версии с которой я колупался, может уже запилили в новых версиях) возможности лочить данные на момент изменения данных. Я проверял - реально "шарики за ролики" и потеря данных всей цепочки, сохраняет только последний пришедший вариант. Там же всеравно для изменения нужно получать весь блок данных, а затем возвращать измененный блок обратно в мемкеш.

Так вот я нашел для себя самый шустрый способ без сериализации и с возможностью блокировки и постановки в очередь - это shmop.
Кроме того, выделенный блок "шары" еще и доступен для всех копий cli/cgi скриптов, не важно от кого выполняющихся. Эта штука нереально супер - стрессо - устойчива, безотказна и шустра.

Так что все вышеперечисленные варианты, кроме shmop - детский лепет с плугом, парашютом и стоп-краном.
14. Crate - 23 Июля, 2012 - 12:46:12 - перейти к сообщению
DeepVarvar пишет:
он то данные какраз сериализует, а не json'ит
По-моему он хранит просто строку, а вот пользователь может закинуть хоть json, хоть сериализованные данные.
15. DelphinPRO - 23 Июля, 2012 - 13:01:11 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. define ('DS', DIRECTORY_SEPARATOR);
  2. class DS {...}
  3. $ds = new DS (ROOT . DS . 'store');


Назовите хоть класс по другому, нафиг лишняя путаница в названиях.. (DS)

 

Powered by ExBB FM 1.0 RC1