Релиз Smalta SQL v0.1b | Альтернативный Форум

Релиз Smalta SQL v0.1b

  • Автор темы Автор темы Rembo
  • Дата начала Дата начала

Rembo

Программист
Регистрация
31.05.2006
Сообщения
556
Популярность
1
Карма
0
Возраст
35
Местоположение
На просторах кода...
ssql.jpg


Smalta SQL – простой и логически понятный язык запросов.
Язык создан в студии «Смальта»
Работы над языком ведутся с 29.09.2007. Первая бета версия вышла 17.10.2007.
Smalta SQL состоит из набора функций для упрощения и оптимизации программного кода Вашего сайта. Главным достоинством языка является работоспособность на хостингах без поддержки MySql.
Smalta SQL устанавливается персонально для каждого сайта, путём подключения исполняемых файлов.
Благодаря Smalta SQL можно значительно упростить и оптимизировать основные часто используемые функции и повысить работоспособность и стабильность работы сайта.

Данной руководство поможет начинающим программистам и каждому, кто желает изучить синтаксис языка Smalta SQL и сделать сайт с использованием данной технологии.

Если у Вас есть предложения по усовершенствованию языка, необходимость в определённых функциях, или же Вы нашли ошибку, Вы можете связаться с разработчиком с помощью:
E-mail: [email protected]
ICQ: 259-158-399
JID: [email protected]
Web: Link hidden, please Sign in or Sing up
Link hidden, please Sign in or Sing up

Все пожелания будут учтены и соответствующие изменения и дополнения (если их возможно реализовать) будут внесении в последующие версии.



Данная тема создана для сбора критики и предложений по усовершенствованию языка.

Версия языка: 0.1b
Дата релиза: 17.10.2007
Cборка от: 19.10.2007

В сборку включено:
Операторов: 8
Дополнительно: документация

Ссылка на архив: http://af.net.ru/attachment.php?attachmentid=9092&stc=1&d=1192801208

Документация и описание отдельно: http://af.net.ru/attachment.php?attachmentid=9093&stc=1&d=1192801212


Вообщем жду предложений и комментариев.
 
Последнее редактирование модератором:
Для тех кто в танке.

Есть известная БД MySQL со своей системой запросов и хранения информации. SSQL (Smalta SQL) это собственная система запросов, для работы с сайтами. Достойная альтернатива известному гиганту.

Скоро получим второй патент на разработку. Ура.
 
Посмотрел.
Что понравилось:
- Идея сама по себе. Для небольших проектов с невысокими требованиями по скорости
вполне может подойти.

Что не понравилось:
- Реляция отсутствует как класс - впрочем оно и понятно, работаем с локальным файлом.
- Интерпретатор языка (SSQL) в интерпретаторе (PHP) - скорость страдает
- Работа с файлом в ФС вместо специализированной БД - скорость страдает

Что хотелось бы видеть:
- Простую работу с другими (сложными) форматами БД (скажем, XML-файлами)
 
Спасибо за критику, очень благодарен!
На счёт скорости, сейчас работаю в этом направлении, придумал что-то вроде хеширования, т.е долго будет грузится только при первом разе, далее результаты запросов будут браться из хеша и сохранятся туда естественно. Потребует чуть больше места на хосте, но скорость возрастёт.
Сейчас тестирую на больших файлах. На маленьких разница почти не заметна, на больших разница в 3 раза.
Т.е если первая обработка с выводом 1000 строк занимала 0.07 то сейчас первая загрузка 0.11 а последующие 0.02, что меня и радует.
На счёт xml, я не особо знаю этот язык, возможно если изучу его особенности впихну функции для работы и с ним.

на счёт
- Интерпретатор языка (SSQL) в интерпретаторе (PHP) - скорость страдает
Можно было бы конечно что нибудь подумать, но язык опирается на давно отлаженные и заточенные функции php, просто использует их рационально

У меня в планах до релиза 1.0 сделать ещё больше операторов, повысить скорость, расширить синтаксис (вложенные операторы). Думаю для патента хватит...дальше перевести cms ну а там посмотрим в каком направлении двину.
 
господа программисты!
Вы допустили одну логическую ошибку: то, что вы предлагаете - это действительно альтернатива для людей не обладающих хостингом с поддержкой СУБД. Надо сказать, что это, как правило нубы, которые не видят смысла выделить 500-600 рЭ за 6 месяцев на покупку самого обычного хостинга с поддержкой мускул. А эти самые новички не будут разбираться с вашим языком и будут вынуждены доплатить личшние 2-3 сотни за поддержку СУБД.
Но как теория - это очень полезный материал!
 
Хорошо, теперь для всех:
Данный язык разрабатывался для Smalta CMS и был выложен в паблик для тестирования.
Если не приживётся чтож, будем пользоваться только мы.
Кто не хочет может не пользоватся. Мы никого не принуждаем и не заставляем. Нравится MySql - пожалуйста. Нам привычнее свои разаботки.

Кстати на счёт нубов не соглашусь. Начинающие программисты да и просто люди для которых это хобби не будут платить 500-600р за хостинг, т.к как таковой он им не нужен.
 
1. Полностью поддерживаю DEV. Проблемы со скоростью.
2. Нет поддержки визуальных средств разработки баз (пока ещё)
 
В принципе проблемы со скоростью были понятны, т.к работать быстрее чем MySql язык не будет.
Суть его в другом. Как правильно заместил DEV "Для небольших проектов с невысокими требованиями по скорости вполне может подойти.", т.к изначально создавался и писался для Smalta CMS, чтобы уменьшить и оптимизировать код.
 
Ух, тяжелые выдались месяцы, но достигнут колосальный прогресс.
Начну попорядку:
1. После месяцы кропотливой работы по переписыванию ядер всех основных проектов, в SSQL появились некоторые полезные и очень приятные особенности, такие как кеш, расширенный и гибкий синтаксис, вложенные операторы...и....ПОДДЕРЖКА XML!!!!!!!!!!
2. До v0.9b осталось совсем не много(решил не зависать не бетах, т.к уже всё почти готово, одна бета, пару релиз контидатов, пре релиз и финалку думаю можно будет выпускать в свет): переписать основные модули и по возможности добавить ещё с десяток, обновить документацию.

Теперь по порядку о новых возможностях:
1. Кеш.
Идея вынужденная, и реализована в целях попытки уменьшения времени. Кеш можно отключить, при работе с кешем на статическом сайте время потраченное на обработку запросов уменьшается до времени загрузки данных из кеша, т.к фукнции парсинга даже не подключаются.
2. Расширенный и гибкий синтаксис
Это собственно то, над чем я сижу последние несколько дней и наконец-то почти закончил.
Несколько примеров:
Код:
"LOAD 'mobile.db' FORMAT 0#1#2:'#' AS firma#id#cost AND 'config.xml' TYPE XML ENCODING 'windows-1251'"
Собственно небольшой запросик на загрузку двух файлов, один как текстовая база, другой xml.
Первое время расширенный синтаксис может казаться не удобным, покажу как можно переделать данный запрос используя новые возможности
PHP:
//Давайте возьмём один массив и напихаем туда всякой нужной нам информации
$info=array("file"=>"mobile",
	  "file_ext"=>"db",
	  "first_id_patch1"=>"FIR",
	  "first_id_patch2"=>"MA",
	  "encoding"=>"windows",
	  "windows"=>"windows-1251"
	);
//теперь немножно переделаем запрос и подключим наш массив в 3-й необязательный аргумент:
print_r(ssql_query("LOAD {[PARAMS_ARR>>file].[PARAMS_ARR>>{file_ext}]} FORMAT 0#1#2:'#' AS (strtolower,{[PARAMS_ARR>>first_id_patch1][PARAMS_ARR>>first_id_patch2]})#id#cost AND 'config.xml' TYPE XML ENCODING [PARAMS_ARR>>[PARAMS_ARR>>encoding]]",false,$info));
В итоге на экране будет:
Код:
Array
(
    [0] => Array
        (
            [firma] => SonyEricsson
            [id] => Z800
            [cost] => 9840
        )

    [1] => Array
        (
            [firma] => Nokia
            [id] => N90
            [cost] => 19690
        )

    [2] => Array
        (
            [firma] => Nokia
            [id] => N80
            [cost] => 21829
        )
.....................

    [999] => Array
        (
            [firma] => Philips
            [id] => Xenium 9@9s
            [cost] => 0
        )

    [load] => Array
        (
            [template] => Array
                (
                    [0] => Array
                        (
                            [@attributes] => Array
                                (
                                    [maxCnt] => 2
                                    [useCache] => 
                                )

                        )

                    [1] => Array
                        (
                            [@attributes] => Array
                                (
                                    [explodeCnt] => 3
                                    [use] => 3
                                )

                            [@value] => 1
                        )

                )

            [flags] => Array
                (
                    [format] => Array
                        (
                            [template] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [explodeCnt] => 2
                                            [use] => 2
                                        )

                                    [@value] => flags
                                )

                            [flags] => Array
                                (
                                    [as] => Array
                                        (
                                            [@attributes] => Array
                                                (
                                                    [useCache] => 
                                                )

                                        )

                                )

                        )

                )

        )
В конце xml, но об этом чуть позже.....
3. Вложенные операторы
Собственно внутри запроса могут быть ещё запросы, например когда нужно вставить не просто элемент массива или значение, а результат какого либо действия, например объединения массивов, то это можно сделать так:
Код:
(array_merge_recursive,~!LOAD 'mobile.db' FORMAT ALL:'#' AS firma#id#cost!~,~!LOAD 'file1.xml' TYPE XML ENCODING 'windows-1251'!~)
4. Поддержка XML
Поддерживается генерация валидного кода из xml в массив и обратная, файлы выглядят следующим образов:
Код:
Исходный файл (файл полученный из массива аналогичен)
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<units>
<load>
  <template maxCnt="2" useCache="false"/>
  <template explodeCnt="3" use="3">true</template>
  <flags>
  	<format>
		<template explodeCnt="2" use="2">flags</template>
		<flags>
			<as useCache="false"/>
		</flags>
	</format>
  </flags>
 </load>
</units>

Получившейся массив:
[load] => Array
        (
            [template] => Array
                (
                    [0] => Array
                        (
                            [@attributes] => Array
                                (
                                    [maxCnt] => 2
                                    [useCache] => 
                                )

                        )

                    [1] => Array
                        (
                            [@attributes] => Array
                                (
                                    [explodeCnt] => 3
                                    [use] => 3
                                )

                            [@value] => 1
                        )

                )

            [flags] => Array
                (
                    [format] => Array
                        (
                            [template] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [explodeCnt] => 2
                                            [use] => 2
                                        )

                                    [@value] => flags
                                )

                            [flags] => Array
                                (
                                    [as] => Array
                                        (
                                            [@attributes] => Array
                                                (
                                                    [useCache] => 
                                                )

                                        )

                                )

                        )

                )

        )
Стоит заметить что для удобства слова true,false,null заменяюццо на соответствующие константы.
Далее с таким массивом можно работать с использованием обычных SSQL функций.

Собственно пока всё что хотел сказать....остальное увидите в следующей бете...Планирую до 4-го февраля, но как получится, не обещаю.
 
Сообщаю результат на сегодняшний день:
Собственно все модули переписаны, дописаны 5 новых, осталось дело за документацией, до чего из за учёбы не доходят руки....и появилась небольшая проблемка, это время...из за расширенного синтаксиса оно значительно увеличилось на маленьких файлах, т.е время обраотки xml файла в 1000 строками примерно равно времени с 10 строками.

Представляю Вашему внимаю запрос, которые загружает все необходимые файлы и параметры движка smalta cms
Код:
LOAD '".SM_MODULES_DIR."/modules".SM_BASE_EXT."' TYPE XML ENCODING 'windows-1251',
	WHERE [VALUES>>@attributes>>enabled]==true,
	ARRAY KEY AS ARRAY KEYSTPL 	
								'paths>>config'#
								'paths>>opts'#
								'paths>>unit'#
								'paths>>lang'#
								'paths>>tpls_cfg'
					 VALUESTPL 
					 			{".SM_MODULES_DIR."/KEY/configs/config.xml}#
								{".SM_MODULES_DIR."/KEY/configs/opts.xml}#
								{".SM_MODULES_DIR."/KEY/configs/unit.xml}#
								{".SM_SKINS_DIR."/".SM_DEFAULT_SKIN."/languages/".SM_DEFAULT_LANG."/KEY.xml}#
								{".SM_SKINS_DIR."/".SM_DEFAULT_SKIN."/templates/configs/KEY.xml},
	EXEC CYCLE (implode,'\'&\'',[VALUES>>paths]) RETURN TYPE,
	EXEC CYCLE 	~!
					LOAD `\'[VALUES]\'` TYPE XML ENCODING 'windows-1251'
				!~ RETURN TYPE,
	EXEC CYCLE 	~!
					SET {params_arr>>params_list} MERGE ~!
															GET `\'[KEYS]>>tpls_cfg\'`,
															WHERE [VALUES>>@attributes>>static]==true,
															ARRAY 'static' AS ARRAY KEYSTPL '[VALUES>>@attributes>>action]>>[VALUES>>@attributes>>type]>>KEY' VALUESTPL {VALUE}
														!~
				!~ RETURN VOID,
	FORMAT tpls_cfg#opts AS 	~!
									GET \'[KEYS]>>tpls_cfg\',
									WHERE [VALUES>>@attributes>>static]!=true
								!~#
								~!
									GET \'[KEYS]>>lang\',WHERE [VALUES>>@attributes>>view]!=false
								!~ 
		AND 0 KEY functions 
		AND functions AS '".SM_MODULES_DIR."/KEY/functions/main/functions".SM_SCRIPT_EXT."',
	EXEC CYCLE ~!
					WHERE (file_exists,[VALUES>>functions])==true,
					EXEC (include,[VALUES>>functions]) RETURN VOID
				!~ RETURN VOID 
		AND CYCLE ~!
					GET \'[KEYS]>>opts\',
					EXEC (define,'SM_ST_(strtoupper,[KEYS])',[VALUES>>@value]) RETURN VOID
				!~ RETURN VOID
 
Назад
Верх Низ