Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Посоветуйте СУБД  [new]
Wol_fi
Member

Откуда:
Сообщений: 7
pkarklin
автор
$connection = new Mongo();
$db = $connection->test;
$time_start = microtime();
for($i=0;$i<=100000000;$i++)
{
$db->insert(array(
'a' => mt_rand(),
'b' => md5(chr(mt_rand(33,126)))
));
}
echo microtime() - $time_start;


Интересно, что ЭТИМ пытались измерить...

Этим? Это синтетический тест на время в PHP среде на вставку 100000000 строк в бд "test" , по два столбца в каждой, первый - int , второй - строка (хеш от рандомного символа). Привёл для сравнения, любой кто знает php напишет без проблем аналог для mysql. Естественно в зависимости от железа время будет различным. Можете добавить memory_get_usage() | memory_get_peak_usage() по вкусу. Ваш К.О.
6 апр 12, 00:04    [12373624]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Wol_fi
Member

Откуда:
Сообщений: 7
pkarklin
Wol_fi
должен тянуть сервер Intel® Core™ i7-2600 quad core...


Чего, простите, Вы назвали сервером???

<b>физическим </b> сервером я назвал вот это - EX4; В качестве же вебсерверов - apache+nginx.
6 апр 12, 00:10    [12373642]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Wol_fi
Это синтетический тест на время


Спрошу еще раз... Вы этим тестом пытались измерить что? Быстродействие чего?

Wol_fi
Естественно в зависимости от железа время будет различным.


Угу. А если еще и тест переписать, то и на порядки на одном и том же железе.

автор
сервером я назвал вот это


Простите, но это не сервер... Давайте, еще айфоны сервером будем называть...
6 апр 12, 08:30    [12373986]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2559
pkarklin
автор
сервером я назвал вот это

Простите, но это не сервер... Давайте, еще айфоны сервером будем называть...

Сервер (грубо говоря, слуга) - это то, что обслуживает кого-то/что-то. Отказоустойчивость, производительность и т.п. не имеют прямого отношения к делу.
6 апр 12, 08:38    [12373997]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Victor Metelitsa
Сервер (грубо говоря, слуга) - это то, что обслуживает кого-то/что-то. Отказоустойчивость, производительность и т.п. не имеют прямого отношения к делу.


Да Вы что? Таки не имеет? А как же:

Wol_fi
Каждый запрос тянет финансовую транзакцию, которая тянет статистику и биллинг, то есть данные могут понадобится real-time до секунды (пользователя запросил выплату, или статистику),


Не надо углубляться в терминологию в отрыве от темы!
6 апр 12, 08:45    [12374013]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2559
pkarklin
Victor Metelitsa
Сервер (грубо говоря, слуга) - это то, что обслуживает кого-то/что-то. Отказоустойчивость, производительность и т.п. не имеют прямого отношения к делу.

Да Вы что? Таки не имеет? А как же:
"К делу" выяснения, сервер это или не сервер.
Wol_fi
Каждый запрос тянет финансовую транзакцию, которая тянет статистику и биллинг, то есть данные могут понадобится real-time до секунды (пользователя запросил выплату, или статистику),

Не надо углубляться в терминологию в отрыве от темы!

Это сервер, характеристики которого вы считаете неподходящими для выполнения описанной в топике работы.
6 апр 12, 08:56    [12374030]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Victor Metelitsa
Это сервер, характеристики которого вы считаете неподходящими для выполнения описанной в топике работы.


Он для любой работы - неподходящий.
6 апр 12, 08:59    [12374035]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Лисек
Member [заблокирован]

Откуда:
Сообщений: 623
FVMas полностью удовлетворяет Вашим условиям. Отличная документация прилагается.
6 апр 12, 09:32    [12374110]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54761

Wol_fi
А мускульные InnoDB и MyISAM очень частенько отказывают|ложатся при больших
размерах, что в этом случае не очень хорошо.

В отсутствии адекватного DBA откажут/лягут любые СУБД.

pkarklin
Он для любой работы - неподходящий.

Зажрались Вы, батенька...

Posted via ActualForum NNTP Server 1.5

6 апр 12, 13:16    [12375697]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Dimitry Sibiryakov
Зажрались Вы, батенька...


Угу. Мне не нужен слуга, у которого, то рука болит, а то понос...
6 апр 12, 13:26    [12375780]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
Wol_fi
SERG1257
пропущено...
MySQL ибо оно уже стоит. ЛЮБАЯ другая субд это риск.
пропущено...
Могут или понадобятся решает заказчик и только он. Нормальный вменяемый пользователь поймет, если большими буквами будет написано что данные доступны только до последнего часа или минуты (минута уже достаточно хороший интервал буферизации)
пропущено...
В отличии от переделок софта, затраты на железо гораздо надежнее. Вероятность поймать проблемы после установки нового сервера (процессора, памяти, диска) конечно же есть, но она не сравнима с вероятностью огрести после установки патча или новой субд. И если заказчик на это не идет ТО ЗАКАЗЧИКА ДАННАЯ ПРОБЛЕМА НЕ ТРОГАЕТ.
Признайтесь честно, вам захотелось потрогать этот MongoDB в условиях приближенных к боевым.

Тонко:)
Трогайте
$connection = new Mongo();
$db = $connection->test;
$time_start = microtime();
for($i=0;$i<=100000000;$i++)
{
$db->insert(array(
'a' => mt_rand(),
'b' => md5(chr(mt_rand(33,126)))
));
}
echo microtime() - $time_start;

Вы видимо работаете в параллельной вселенной. Так как в этой адекватный заказчик, понимающий все тонкости попадается редко. Это к сожалению не такой случай. А мускульные InnoDB и MyISAM очень частенько отказывают|ложатся при больших размерах, что в этом случае не очень хорошо.


Кстате какой здесь результат ?
(ради интереса)
12 апр 12, 18:48    [12408048]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
pkarklin
Dimitry Sibiryakov
Зажрались Вы, батенька...

Угу. Мне не нужен слуга, у которого, то рука болит, а то понос...


говнокода меньше писать надо ...
12 апр 12, 19:22    [12408169]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895
Bazist
pkarklin
пропущено...

Угу. Мне не нужен слуга, у которого, то рука болит, а то понос...


говнокода меньше писать надо ...

Да просто задачи другого масштаба.
12 апр 12, 19:36    [12408212]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bazist,

Поучи меня еще, ага...
12 апр 12, 20:08    [12408308]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
RENaissance
Bazist
пропущено...
говнокода меньше писать надо ...

Да просто задачи другого масштаба.


скорей понты другого масштаба, нужно приземленней смотреть на вещи.

Вполне себе оборотистый восьмиядерный проц, оперативы много, винт пишет
100мб в секунду.

Что такое для такого сервака какието 200-300 вставок в секунду ?
Теоретический предел его 200-300 ТЫСЯЧ вставок в секунду,
но конечно на определенном ПО, на какойто непопсовой СУБД знающей толк
в производительности.
12 апр 12, 20:52    [12408462]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Random_Goodman
Member [заблокирован]

Откуда:
Сообщений: 3708
Alexander Ryndin
Какая-то прям мода на MongoDB. Коллективное помешательство. :)

Пройдет. Главное - ее попробовать. Не сразу, но пройдет. Как ВНЕЗАПНО ВДРУГ данные исчезнут.
12 апр 12, 20:54    [12408467]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bazist
СУБД знающей толк в производительности.


СУБД решают не только задачи производительности, как это не парадоксально.
12 апр 12, 20:54    [12408468]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
pkarklin
Bazist
СУБД знающей толк в производительности.


СУБД решают не только задачи производительности, как это не парадоксально.


СУБД много чего решают. И то что нужно и то что не нужно. Знаем, видели, наслышаны.
То что можно было бы выписать с десятком строчек на каком нибудь оперативном языке
приходится городить иногда таким вот огородом, например

+

ALTER FUNCTION GetRegisterEntries()RETURNS table
AS
RETURN
(
WITH PC ( -- Contains all registrations with previous calculated
			RegisterDateID,
			IsOfPersonRef,
			IsOfCalendarRef,
			RegisterDate,
			RegisterDateStartDateTime,
			RegisterDateEndDateTime,
			CalendarStartDateTime,
			CalendarEndDateTime,
			CreateOnDateRegisterDate,
			FlexInMinutes,
			IsExportedToForeignSystem,
			RegisterEntryId,
			IsOfProjectRef,
			IsOfJobCodeRef,
			IsOfJobcodeValue,
			IsOfRegisterTypeRef,
			Overtime,
			RegisterEntryStartDateTime,
			RegisterEntryEndDateTime,
			RegisterTimeInMin,
			IsOfShowTypeRef,
			IsOfOriginFromRef,
			Comment,
			IsRegisteredByPersonRef,
			BoolValue1,
			BoolValue2,
			BoolValue3,
			IsOfLocationRef,
			IsOfRegisterEntryRef,
			IsOfRegisterGroupEntriesRef,
			IsOfGroupingRef,
			IsOfRegisterGroupTypeRef,
			ManagementBonus,
			RegisterEntryCreatedOnDate,
			BeforeOvertime,
			BeforeSumTime,
			DefaultName,
			RegNum
		) AS  
		(		  
			SELECT	rd.Id RegisterDateID,
					rd.IsOfPersonRef,
					rd.IsOfCalendarRef,
					rd.RegisterDate,
					rd.StartDateTime RegisterDateStartDateTime,
					rd.EndDateTime RegisterDateEndDateTime,
					rd.CalendarStartDateTime,
					rd.CalendarEndDateTime,
					rd.CreateOnDate CreateOnDateRegisterDate,
					rd.FlexInMinutes,
					rd.IsExportedToForeignSystem,
					re.Id RegisterEntryId,
					re.IsOfProjectRef,
					re.IsOfJobCodeRef,
					re.IsOfJobcodeValue,
					re.IsOfRegisterTypeRef,
					re.Overtime,
					re.StartDateTime RegisterEntryStartDateTime,
					re.EndDateTime RegisterEntryEndDateTime,
					re.RegisterTimeInMin2 RegisterTimeInMin,
					re.IsOfShowTypeRef,
					re.IsOfOriginFromRef,
					re.Comment,
					re.IsRegisteredByPersonRef,
					re.BoolValue1,
					re.BoolValue2,
					re.BoolValue3,
					re.IsOfLocationRef,
					re.IsOfRegisterEntryRef,
					re.IsOfRegisterGroupEntriesRef,
					re.IsOfGroupingRef,
					re.IsOfRegisterGroupTypeRef,
					re.ManagementBonus,
					re.CreatedOnDate RegisterEntryCreatedOnDate,
					datediff(minute, 
							 dbo.OnlyTime(rd.StartDateTime), 
							 dbo.OnlyTime(rd.CalendarStartDateTime)) BeforeOvertime, --Overtime before a calendar time
					(
						SELECT SUM(RegisterTimeInMin2) 
						FROM  (
										--Devide long registrations on serveral parts
										SELECT	re2.*,
												re2.RegisterTimeInMin RegisterTimeInMin2,
												CASE WHEN NOT ds.DefaultName like 'Lunch%'
													 THEN 0
													 ELSE 1
												END RegNum
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NOT NULL
										UNION ALL
										SELECT	re2.*, --100% or 50% or 25% of RegisterTimeInMin
												CASE WHEN (re2.RegisterTimeInMin + 60 > DATEDIFF(minute, 
																								 rd2.CalendarStartDateTime, 
																								 rd2.CalendarEndDateTime))
													 THEN 
														 CASE WHEN re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																											rd2.CalendarStartDateTime, 
																										  rd2.CalendarEndDateTime) 
															  THEN re2.RegisterTimeInMin/4
															  ELSE re2.RegisterTimeInMin/2
														 END 
													 ELSE re2.RegisterTimeInMin
												END RegisterTimeInMin2,
												1 RegNum 
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
										UNION ALL	--50% or 25% of RegisterTimeInMin		
										SELECT	re2.*, 
												CASE WHEN re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																								  rd2.CalendarStartDateTime, 
																								  rd2.CalendarEndDateTime) 
													 THEN re2.RegisterTimeInMin/4
													 ELSE re2.RegisterTimeInMin/2
												END  RegisterTimeInMin2,
												2 RegNum
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.RegisterTimeInMin + 60 > DATEDIFF(minute, 
																					 rd2.CalendarStartDateTime, 
																					rd2.CalendarEndDateTime)
											AND re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
										UNION ALL --25% of RegisterTimeInMin
										SELECT	re2.*,
												re2.RegisterTimeInMin/4,
												3 RegNum 
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																					  rd2.CalendarStartDateTime, 
																					  rd2.CalendarEndDateTime)
											AND re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
										UNION ALL --25% of RegisterTimeInMin
										SELECT	re2.*,
												re2.RegisterTimeInMin/4,
												4 RegNum 
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																					  rd2.CalendarStartDateTime, 
																					  rd2.CalendarEndDateTime)
											AND re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
							  ) re3
							  LEFT JOIN DefaultSettingsUnique ds2 on re3.IsOfProjectRef = ds2.IsOfProjectRef 
						WHERE re3.IsOfRegisterDateRef = rd.Id 
							  AND (re3.RegNum < re.RegNum)
							  AND (
									NOT (ds2.DefaultName like ('Lunch%')) 
									OR ds2.DefaultName IS NULL
								  ) 
					) BeforeSumTime, -- Sum of work minutes previous registrations,
					ds.DefaultName,
					re.RegNum
					FROM dbo.RegisterDate rd
						 INNER JOIN 
									(	
										--Devide long registrations on serveral parts
										SELECT	re2.*, --only PartlyIll
												re2.RegisterTimeInMin RegisterTimeInMin2,
												CASE WHEN NOT ds.DefaultName like 'Lunch%'
													 THEN 0
													 ELSE 1
												END RegNum
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NOT NULL
										UNION ALL
										SELECT	re2.*, --100% or 50% or 25% of RegisterTimeInMin
												CASE WHEN (re2.RegisterTimeInMin + 60 > DATEDIFF(minute, 
																								 rd2.CalendarStartDateTime, 
																								 rd2.CalendarEndDateTime))
													 THEN 
														 CASE WHEN re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																											rd2.CalendarStartDateTime, 
																										  rd2.CalendarEndDateTime) 
															  THEN re2.RegisterTimeInMin/4
															  ELSE re2.RegisterTimeInMin/2
														 END 
													 ELSE re2.RegisterTimeInMin
												END RegisterTimeInMin2,
												1 RegNum 
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
										UNION ALL	--50% or 25% of RegisterTimeInMin		
										SELECT	re2.*, 
												CASE WHEN re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																								  rd2.CalendarStartDateTime, 
																								  rd2.CalendarEndDateTime) 
													 THEN re2.RegisterTimeInMin/4
													 ELSE re2.RegisterTimeInMin - re2.RegisterTimeInMin/2
												END  RegisterTimeInMin2,
												2 RegNum
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.RegisterTimeInMin + 60 > DATEDIFF(minute, 
																					 rd2.CalendarStartDateTime, 
																					rd2.CalendarEndDateTime)
											AND re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
										UNION ALL --25% of RegisterTimeInMin
										SELECT	re2.*,
												re2.RegisterTimeInMin/4,
												3 RegNum 
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																					  rd2.CalendarStartDateTime, 
																					  rd2.CalendarEndDateTime)
											AND re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
										UNION ALL --25% of RegisterTimeInMin
										SELECT	re2.*,
												re2.RegisterTimeInMin - (re2.RegisterTimeInMin/4) * 3, --rounding
												4 RegNum 
										FROM RegisterEntries re2
											 INNER JOIN RegisterDate rd2 ON re2.IsOfRegisterDateRef = rd2.Id
											 LEFT JOIN DefaultSettingsUnique ds ON re2.IsOfProjectRef = ds.IsOfProjectRef
										WHERE re2.RegisterTimeInMin/2 + 60 > DATEDIFF(minute, 
																					  rd2.CalendarStartDateTime, 
																					  rd2.CalendarEndDateTime)
											AND re2.IsOfShowTypeRef = 1
											AND ds.DefaultName IS NULL
									) re on re.IsOfRegisterDateRef = rd.Id
						 LEFT JOIN DefaultSettingsUnique ds on re.IsOfProjectRef = ds.IsOfProjectRef
			)  
SELECT *,
		DATEADD(minute, 
				(CASE WHEN t3.RegisterTimeInMinBefore IS NOT NULL 
					  THEN t3.RegisterTimeInMinBefore 
					  ELSE 0 
				 END), 
				t3.RegisterDateStartDateTime) EntryStartDateTime, --Calculate StartDateTime of the Register Entry by RegisterTimeInMinBefore and RegisterDateStartDateTime
		DATEADD(minute, 
				(CASE WHEN t3.RegisterTimeInMinBefore IS NOT NULL 
					  THEN t3.RegisterTimeInMinBefore 
					  ELSE 0 
				 END) + t3.RegisterTimeInMin, 
				t3.RegisterDateStartDateTime) EntryEndDateTime	 --Calculate EndDateTime of the Register Entry by RegisterTimeInMinBefore and RegisterTimeInMin and RegisterDateStartDateTime
FROM
(
	SELECT *,
			(
				SELECT SUM(RegisterEntries.RegisterTimeInMin) 
				FROM (
						SELECT	PC.RegisterEntryId, 
								PC.RegisterDateId, 
								PC.RegisterTimeInMin, 
								1 REType,					--Registrations before CalendarStartDateTime
								RegNum
						FROM PC
						WHERE ( 
								PC.BeforeSumTime IS NULL 
								OR PC.BeforeSumTime < BeforeOvertime 
							  ) 
							  AND (NOT isnull(PC.DefaultName, '') like ('Lunch%')) 
						UNION ALL
						SELECT PC.RegisterEntryId, 
								PC.RegisterDateId, 
								PC.RegisterTimeInMin, 
								2 REType,					--Lunch registration
								RegNum
						FROM PC
						WHERE ( PC.DefaultName like ('Lunch%') )
						UNION ALL
						SELECT PC.RegisterEntryId, 
								PC.RegisterDateId, 
								PC.RegisterTimeInMin, 
								3 REType,						--All registrations after lunch
								RegNum
						FROM PC
						WHERE (PC.BeforeSumTime >= BeforeOvertime ) 
								AND (NOT isnull(PC.DefaultName, '') like ('Lunch%')) 
					) RegisterEntries 
				WHERE RegisterEntries.RegisterDateId = t2.RegisterDateId	
					  AND (RegisterEntries.REType < t2.REType
							OR (RegisterEntries.REType = t2.REType AND RegisterEntries.RegisterEntryId < t2.RegisterEntryId)  
							OR (RegisterEntries.REType = t2.REType AND RegisterEntries.RegisterEntryId = t2.RegisterEntryId AND RegisterEntries.RegNum < t2.RegNum)  
			)	
		) RegisterTimeInMinBefore	--Calculate previous time of the registrations.
	FROM
	(
		SELECT *, 
				1 REType	--Registrations before CalendarStartDateTime
		FROM PC
		WHERE ( PC.BeforeSumTime IS NULL 
				OR PC.BeforeSumTime < BeforeOvertime ) 
				AND (NOT isnull(PC.DefaultName, '') like ('Lunch%')) 
		UNION ALL
		SELECT *,		
				2 REType --Lunch registration
		FROM PC
		WHERE ( PC.DefaultName like ('Lunch%') )
		UNION ALL
		SELECT *,		
				3 REType --All registrations after lunch
		FROM PC
		WHERE (	PC.BeforeSumTime >= BeforeOvertime ) 
				AND (NOT isnull(PC.DefaultName, '') like ('Lunch%')) 
					  
	) t2
) t3
)



А потом мы говорим, что сервер такойто нам уже и не сервер ...
Вообщемто это офтоп, но всегда нужно понимать что не железо отыгрывает первую роль, а как раз софт.
Правильно нужно подбирать инструменты, а не пинать конфигурации серверов, потому что ваш любимый дистрибутив в состоянии покоя уже сотни мегабайт отжирает.
12 апр 12, 21:02    [12408486]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bazist
То что можно было бы выписать с десятком строчек на каком нибудь оперативном языке
приходится городить иногда таким вот огородом, например


Угу. Именно такие огороды и позволяют добиться максимального быстродействия при обработке реляционных данных, а не "оперативные языки".

Bazist
но всегда нужно понимать что не железо отыгрывает первую роль, а как раз софт.


Первую роль всегда играет сбаллансированность системы, ибо стебельку не место на HP DL 980 G7, а MS SQL на калькуляторе MK-61.

Bazist
Правильно нужно подбирать инструменты


Спасибо, у меня с этим нет проблем. Если Вы хотите об этом поговорить, то не со мной.
12 апр 12, 21:15    [12408514]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
pkarklin
Bazist
То что можно было бы выписать с десятком строчек на каком нибудь оперативном языке
приходится городить иногда таким вот огородом, например


Угу. Именно такие огороды и позволяют добиться максимального быстродействия при обработке реляционных данных, а не "оперативные языки".


Иногда запросы нужно читать, а не форматирование разглядывать.
Этот запрос иллюстрация всей уродливости реляционной системы, когда пытаются решить императивные задачи.
Получается долго, длинно, медленно, с известными неисправимыми багами ....

pkarklin
Bazist
но всегда нужно понимать что не железо отыгрывает первую роль, а как раз софт.

Первую роль всегда играет сбаллансированность системы, ибо стебельку не место на HP DL 980 G7, а MS SQL на калькуляторе MK-61.


Совершенно с вами согласен. Осталось вам только обосновать, что для задачи ТС действительно необходим MS SQL.
Он не будет выглядеть как пригнанный экскаватор на грядку петрушки требующий HP DL 980 G7. Повторюсь, какая нибудь легковесная база будет в сотни раз быстрее работать, даже на классических задачах.
13 апр 12, 12:34    [12411204]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bazist
Этот запрос иллюстрация всей уродливости реляционной системы, когда пытаются решить императивные задачи.
Получается долго, длинно, медленно, с известными неисправимыми багами ....


В подавляющем большинстве случаев уродливой реляционную модель делают кривые руки проектировщиков\разработчиков.

Bazist
Осталось вам только обосновать, что для задачи ТС действительно необходим MS SQL.


Я (или кто-то другой в этом топике) где-то предлагал ТС MS SQL?!

Bazist
Он не будет выглядеть как пригнанный экскаватор на грядку петрушки требующий HP DL 980 G7. Повторюсь, какая нибудь легковесная база будет в сотни раз быстрее работать, даже на классических задачах.


Пожалуйста, решите аналогичную задачу в многопользовательском режиме (когда 1 000 пользователей делают проводки) с сохранением консистентности. А так же решите каку-нибудь расчетную задачу, в которой была бы и запись и чтение в одной транзакции. И чтоб посередине вашего расчета уборщица выдернула шнур питания из Вашего "сервера".
13 апр 12, 14:16    [12412062]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895
Bazist
Иногда запросы нужно читать, а не форматирование разглядывать.
Этот запрос иллюстрация всей уродливости реляционной системы, когда пытаются решить императивные задачи.

Не нужно пытаться обосновать кривость своей архитектуры, якобы, недостатками реляционной модели. Задачи, которые не предназначения для SQL, всегда можно вынести в отдельный слой, что позволяет большинство современных СУБД.

Ну а если разрабатывать задачу в стиле "Что вижу, о том пою", плюс забивать гору костылей, то да, получает так, как вы и сказали:
Bazist
Получается долго, длинно, медленно, с известными неисправимыми багами ....
13 апр 12, 14:28    [12412177]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
pkarklin
Я (или кто-то другой в этом топике) где-то предлагал ТС MS SQL?!


Тогда осталось непонятно как было определено что сервер для этой задачи слабый.
Какая СУБД имелась ввиду на этом сервере ?

pkarklin
Пожалуйста, решите аналогичную задачу в многопользовательском режиме (когда 1 000 пользователей делают проводки) с сохранением консистентности. А так же решите каку-нибудь расчетную задачу, в которой была бы и запись и чтение в одной транзакции. И чтоб посередине вашего расчета уборщица выдернула шнур питания из Вашего "сервера".


Решать эту задачу я не буду. У меня нет 1000 пользователей делающих одновременно проводки и нет уборщицы которая выдергивает неожиданно шнур. Искренне надеюсь что 99% ресурсов обычная СУБД тратит в этой задачи на блокировки, консистенцию данных, рассылку почты, секьюрити, статистику (что там еще есть, напомните ?), а 1% тратит собственно на саму задачу продовок. Тогда по скоростям все впринципе сходится.
13 апр 12, 14:28    [12412178]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
Bazist
Member [заблокирован]

Откуда: Спілкуйся Українською
Сообщений: 8157
Блог
RENaissance
Bazist
Иногда запросы нужно читать, а не форматирование разглядывать.
Этот запрос иллюстрация всей уродливости реляционной системы, когда пытаются решить императивные задачи.

Не нужно пытаться обосновать кривость своей архитектуры, якобы, недостатками реляционной модели. Задачи, которые не предназначения для SQL, всегда можно вынести в отдельный слой, что позволяет большинство современных СУБД.

Ну а если разрабатывать задачу в стиле "Что вижу, о том пою", плюс забивать гору костылей, то да, получает так, как вы и сказали:
Bazist
Получается долго, длинно, медленно, с известными неисправимыми багами ....


О каком слое идет речь ?
Речь идет о жонглировании временными таблицами и курсорами ?
Вы разобрались хоть что делает эта функция ?
13 апр 12, 14:35    [12412245]     Ответить | Цитировать Сообщить модератору
 Re: Посоветуйте СУБД  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bazist
Тогда осталось непонятно как было определено что сервер для этой задачи слабый.
Какая СУБД имелась ввиду на этом сервере ?


Я где-то сказал, что этот сервер "слабый"?! Помоему, Вы начинаете домысливать за меня... Я уже достаточно на мой взгляд, обосновал, что не может железяка с процем для десктопов и софверным раидом на двух винтах, купленных на Митинском радиорынке, называться сервером. Вы не догадываетесь, почему? Как Вы думаете, почему HDD того же объема и скорости для SAN стоит на порядок дороже?

автор
Искренне надеюсь что 99% ресурсов обычная СУБД тратит в этой задачи на блокировки, консистенцию данных, рассылку почты, секьюрити, статистику, а 1% тратит собственно на саму задачу продовок. Тогда по скоростям все впринципе сходится.


Совершенно верно. Поэтому какое-либо сравнение Вашего детища с промышленными СУБД в части быстродействия не имеет смысла.
13 апр 12, 14:39    [12412279]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить