Форум: "Прочее";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизПолучение имени метода Найти похожие ветки
← →
Maaacheba (2009-02-17 19:36) [40]
> т.к. знаем, что след. круг пойдет по заведомо "дырявым"
> :)
а мы этого не знаем, потому что клиент с номером 30 может существовать гораздо дольше, чем клиент с номером 9587, это невозможно предугадать. Соответственно, когда пойдет новый круг далеко не факт, что все номера будут свободны.
← →
zabyl parol' (2009-02-17 19:39) [41]
> Maacaheba (17.02.09 16:39) [15]
I ne len" zhe bylo 4152 symvola nabivat", ne schitaja probelov... ;)
Skol"ko energii !!!
← →
Johnmen © (2009-02-17 19:40) [42]
> Maaacheba (17.02.09 17:45) [29]
> Есть номер клиента, обычное число. Есть граница времени (обычно это
> ночью), после которой нужно "обнулить" номера клиентов и
> начать присваивать с наименьшего неиспользуего номера.
> Расскажи, пожалуйста, в чем я неправ изначально, если хочу найти
> наименьший неиспользуемый среди клиентов номер на текущий
> момент.
Здесь ты приводишь не изначальную постановку вопроса, а твоё вИдение, как его решать. Мне это не нужно и не интересно.
А интересна, и имеет значение, изначальная ПОСТАНОВКА. ТЗ, если угодно.
Вот про эту изначальность и спич... Но её нет в твоих постах, т.е. совсем.
← →
AndreyV © (2009-02-17 19:56) [43]> [40] Maaacheba (17.02.09 19:36)
> а мы этого не знаем, потому что клиент с номером 30 может
> существовать гораздо дольше, чем клиент с номером 9587,
> это невозможно предугадать. Соответственно, когда пойдет
> новый круг далеко не факт, что все номера будут свободны.
Мне вот не понятно, зачем физически удалять клиента из базы, ну сделали его не активным, а лучше добавить два поля "Время активации", "Время деактивации" вместо "Активен" и простым запросом искать наименьший свободный номер. Заодно история останется, а то что это за база.
Это мои домыслы, не надо меня обвинять в залезании в твои мысли.
← →
Сергей М. © (2009-02-17 20:00) [44]
> Riply © (17.02.09 17:51) [31]
> человек, только что пришедший на форум
Сия персона утверждает, что на DM он не новичок - где-то там в его ближайших постах два года фигурирует.
Даже если это не блеф, то, пожалуй, кто-то из "обиженых", вдохновленный тындынщиной и пр., занялся клоун-буффонадой с переодеваниями)
← →
Юрий Зотов © (2009-02-17 20:02) [45]1. Заводим 2-ю таблицу с единственным полем ID.
2. На 1-ю таблицу вешаем триггеры на DELETE и UPDATE, в этих триггерах при любом удалении записи (физическом или логическом) делаем INSERT во 2-ю таблицу с ID удаленной из 1-й таблицы записи.
3. Теперь дырка в 1-й таблице ищется по 2-й: select min(ID) from tbl2
4. На 1-ю таблицу вешаем триггер на INSERT: если ID новой записи есть во 2-й таблице, то из 2-й таблицы эту запись удаляем.
И вся морковь, без извращений.
← →
AndreyV © (2009-02-17 20:09) [46]> [45] Юрий Зотов © (17.02.09 20:02)
Дык нет у него триггеров в - SQLite.
← →
Юрий Зотов © (2009-02-17 20:12) [47]> AndreyV © (17.02.09 20:09) [46]
А хранимки есть? Можно их использовать.
В любом случае задача сводится к выполнению группы SQL-инструкций в одной транзакции. Это должно быть везде.
← →
Сергей М. © (2009-02-17 20:24) [48]
> Юрий Зотов © (17.02.09 20:12) [47]
Да нет у него нишиша - ни ХП ни триггеров.
А дырки есть)
← →
AndreyV © (2009-02-17 20:34) [49]> [48] Сергей М. © (17.02.09 20:24)
> Да нет у него нишиша - ни ХП ни триггеров.
> А дырки есть)
Прочитал, что транзакции имеются с полной блокировкой на запись файла БД модифицирующей транзакцией. Так что подход ЮЗ должен работать.
← →
Сергей М. © (2009-02-17 20:43) [50]
> AndreyV © (17.02.09 20:34) [49]
Транзакционный механизм - есть он или нет его, блокировочный он или версионный, зереный он или кислый - тут совсем ни причем.
Тут о дырках война)
← →
AndreyV © (2009-02-17 21:05) [51]> [50] Сергей М. © (17.02.09 20:43)
> Тут о дырках война)
Пока автора нет отчего не поразмышлять вслух. Ах да, на телепатию здесь табу.
Ждем-с автора с ТЗ.
← →
Maaacheba (2009-02-17 22:00) [52]zabyl parol" (17.02.09 19:39) [41]
Skol"ko energii !!!
питаюсь батарейками энерджайзер )
Johnmen © (17.02.09 19:40) [42]
Здесь ты приводишь не изначальную постановку вопроса, а твоё вИдение, как его решать. Мне это не нужно и не интересно.
А интересна, и имеет значение, изначальная ПОСТАНОВКА. ТЗ, если угодно
а что же это такое? Это и есть постановка задачи.
Клиенты есть, от них никуда не деться, это не моя прихоть, они действительно есть. Клиентам нужно выделять номер, этот номер потом будет отображаться на дисплее. Номер должен быть как можно более простой, чтобы клиенту удобно было искать свой номер в списке.
Я даже не знаю как это сформулировать по другому. Приведи пример?
И расскажи в чем я неправ изначально )
AndreyV © (17.02.09 19:56) [43]
Мне вот не понятно, зачем физически удалять клиента из базы, ну сделали его не активным, а лучше добавить
а зачем вообще в SQL серверах предусмотрена команда DELETE?! Мне кажется это ответ на твой вопрос. Чтобы через пару лет при сотне клиентов база не весила пару гигабайт.
Сергей М. © (17.02.09 20:00) [44]
Сия персона утверждает, что на DM он не новичок - где-то там в его ближайших постах два года фигурирует
не 2 года, а лет 5. Я и Мерлина помню, и общался с ним, кстати. Только какое отношение это имеет к атмосфере и уважении? Типа если новичок - можно втаптывать в грязь, а если нет - отвечать нормально? В принципе, так и есть, только что в этом нормального?
Юрий Зотов © (17.02.09 20:02) [45]
И вся морковь, без извращений.
Юрий Зотов © (17.02.09 20:12) [47]
А хранимки есть? Можно их использовать
дядь Юра, нету в скулайте ни хранимок, ни тригеров.
← →
@!!ex © (2009-02-17 22:03) [53]> Чтобы через пару лет при сотне клиентов база не весила пару
> гигабайт.
ПРи реюзе неактивных аккаунтов база будет размером в максимальное количество акков.
← →
Maaacheba (2009-02-17 22:11) [54]
> ПРи реюзе неактивных аккаунтов база будет
отложилось в памяти почему-то, что PK у записи менять не гуд. И насколько я знаю, некоторые БД просто не позволяют этого делать, не хочется нарваться на проблемы при смене провайдера. Возможно, что-то я путаю. Ну это потому что я тупой )
← →
Юрий Зотов © (2009-02-17 22:19) [55]> нету в скулайте ни хранимок, ни тригеров
Уже говорил: нет - и не надо. Задача слежения за дырками в таблице и их обнаружения сводится к тому, что при каждой операции INSERT, DELETE или UPDATE с этой таблицей нужно всего лишь выполнить не одну SQL-инструкцию, а группу, в одной транзакции. Инициатором выполнения этой группы может быть и клиент.
← →
Maaacheba (2009-02-17 22:26) [56]Юрий Зотов © (17.02.09 22:19) [55]
Задача слежения за дырками в таблице и их обнаружения сводится к тому, что при каждой операции INSERT, DELETE или UPDATE с этой таблицей нужно всего лишь выполнить не одну SQL-инструкцию
ну да, этот вариант решения понятен. Но я уже там сделал по-другому. Если когда буду переписывать этот модуль сделаю, наверное, как вы сказали. Спасибо.
P.S. Хотя исключительно для того, чтобы потом искать дырку переписывать все модифицирующие запросы и заводить дополнительную таблицу (их там всего-то две пока) - почему-то жаба душит )
С тригерами было бы красиво - согласен. А тут некое усложнение логики все таки... Забыл об этом нюансе, сделал в одном месте одинарный запрос выполняющий свою функцию без второго хелпера-запроса - и привет )
← →
Юрий Зотов © (2009-02-17 22:29) [57]> Maaacheba (17.02.09 22:26) [56]
Даже более того: стоит влезть в БД другим клиентом - и тоже хана. Но что ж тут сделаешь, коль скоро выбрана именно такая недобаза?
← →
Petr V. Abramov © (2009-02-17 22:43) [58]
> Maaacheba (17.02.09 18:46) [37]
> вот опять мы начали играть в телепатов. Номера идут как
> раз подряд, точнее выделяются в результате операций с дырками
> подряд.
http://delphimaster.net/view/2-1234454755/
Задача: найти первую свободную "дырку" в последовательности Number среди не помеченных на удаление записях.
Пример:
Number | FlagDeleting
================
1 | 0
6 | 0
4 | 0
2 | 0
узнаЕшь?
← →
Petr V. Abramov © (2009-02-17 22:46) [59]
> Maaacheba (17.02.09 18:46) [37]
> Но дело в том, что запись может быть не только ПОМЕЧЕНА
> как удаленная, а быть и реально удалена, что я и обозначил
> в своем вопросе.
где?
в вопросе написано:
Задача: найти первую свободную "дырку" в последовательности Number среди не помеченных на удаление записях.
← →
Petr V. Abramov © (2009-02-17 22:52) [60]
> Maaacheba (17.02.09 22:00) [52]
> Клиенты есть, от них никуда не деться, это не моя прихоть,
> они действительно есть. Клиентам нужно выделять номер,
> этот номер потом будет отображаться на дисплее. Номер должен
> быть как можно более простой, чтобы клиенту удобно было
> искать свой номер в списке.
> Я даже не знаю как это сформулировать по другому. Приведи
> пример?
а проще и не надо, надо это было в изначальной ветке сказать, а не считать ниже собственного достоинства.
Ты придумал свой метод решения, который приводит к черезжопщине (что бывает со всяким, увы), а потом всех, кто не хочет или не советует решать задачу ттвоим методом считаешь плохими людьми.
Ну написал бы: <постановка такая-то> очень хочу решить через дырки, никто б не ругался :)
← →
Maaacheba (2009-02-17 22:53) [61]я акцентировал внимание на слове "изначально". вот именно ИЗНАЧАЛЬНО - они идут последовательно. А вот в результате удаления записей - да, в цепочке могут быть надоевшие всем "дырки".
← →
Petr V. Abramov © (2009-02-17 23:09) [62]
> Maaacheba (17.02.09 22:53) [61]
это можно обсуждать долго и конструктивно, вникая в тонкости задачи.
Изначальная суть в том, что ты посчитал ниже собственного достоинства изложить суть задачи, и уперся на своем черезжопном решении, которым заниматься - тратить попусту свое и твое время
← →
AndreyV © (2009-02-17 23:10) [63]> [52] Maaacheba (17.02.09 22:00)
> AndreyV © (17.02.09 19:56) [43]
> Мне вот не понятно, зачем физически удалять клиента из базы,
> ну сделали его не активным, а лучше добавить
>
> а зачем вообще в SQL серверах предусмотрена команда DELETE?
> ! Мне кажется это ответ на твой вопрос. Чтобы через пару
> лет при сотне клиентов база не весила пару гигабайт.
Логика проста - есть бум пользоваться, "format c:" тоже есть.
Для 1ГБ/год это ж надо с десяток клиентов в секунду добавлять.
По заданию получаются клиенты безликие какие-то, как анонимные пациенты в некоторых клиниках, но это ты не договариваешь, может так и есть - номерок и всё - ушёл удалили запись, забыли о существовании.
Вобщем не нравится мне этот подход, но дело твоё.
← →
clickmaker © (2009-02-17 23:17) [64]> Номер должен быть как можно более простой, чтобы клиенту
> удобно было искать свой номер в списке
← →
clickmaker © (2009-02-17 23:19) [65]вообще-то номер и ID - разные вещи.
можно завести отдельную таблицу с номерами, можно продавать короткие номера за деньги... ну как в аське, знаете...
← →
clickmaker © (2009-02-17 23:23) [66]то есть схема такая
ID - это identity, он возрастает, его не трогаем.
Number - при удалении клиента, номер заносится в таблицу свободных номеров.
При добавлении нового клиента ищем максимальный номер в таблице действующих + 1, потом - в таблице свободных.
Который меньше, тот и даем клиенту.
← →
Petr V. Abramov © (2009-02-17 23:54) [67]
> clickmaker © (17.02.09 23:19) [65]
> вообще-то номер и ID - разные вещи.
справедливости ради, у аффтара так и есть.
но ответ на вопрос "нафига" я, наверное, в силу ограниченности, все равно придумать никак не могу
P.S. offtop. как-то на sql.ru читал ветку, где один из разработчиков АСКП (это в Маскве такая офигенно электронная система посадки в автобусы) решил проконсультироваться. Ответил за всю АСКП :), всем, кто геморроится при влезании в автобус
← →
sniknik © (2009-02-18 01:15) [68]>> вообще-то номер и ID - разные вещи.
> справедливости ради, у аффтара так и есть.
это он только так говорит, тут например
Maaacheba (17.02.09 17:02) [20]
> если ты думаешь что ищутся дырки в PK.
(т.е. надо понимать что нет, т.к. сарказм)
но, если у него номер и ID разные то почему >
Maaacheba (17.02.09 22:11) [54]
>> ПРи реюзе неактивных аккаунтов база будет
> отложилось в памяти почему-то, что PK у записи менять не гуд.
собирается менять PK при "реюзе"? и менять нельзя.
(надо понимать что нельзя менять PK, а так как меняется порядковый номер...)
он похоже считает "особым шиком" запутывать тех кто ему помогает... или действительно - "Ну это потому что я тупой )" © тот же пост.
т.к. если бы взял на себя труд подумать, то понял бы, что при "реюзе" ничего менять не пришлось бы, и неважно где у него номер, в PK или в дополнительном поле. при повторном использовании просто находится и используется уже существующая запись просто с нее снимается признак неактивная... и все. и нескольких гигабайт не будет, т.к. новых не добавляется при найденном неактивном номере, будет всего лишь столько записей сколько было максимум клиентов в самый лучший для бизнеса день...
т.е. схема вполне работоспособная для описанного "ТЗ". правда не удивлюсь если сейчас еще, что то "всплывет" изза чего она "не катит"... ну это уже в порядке вещей.
← →
Petr V. Abramov © (2009-02-18 01:18) [69]
> что то "всплывет" изза чего она "не катит"... ну это уже
> в порядке вещей.
прям как у юзера, а не програмера
:)
← →
Германн © (2009-02-18 01:28) [70]Кстати.
Вспоминая упоминания автора в топике об общении с Мерлином. (Да и с Лелем в купе).
И я с ними общался. Причём довольно много и часто (Не в реале. На форуме). Но вот знаний о Дельфи у меня от этих общений не прибавилось! (Точнее прибавилось, надо отдать справедливость вышеназванным, но очень мало :)
← →
oxffff © (2009-02-18 07:50) [71]
> Maacaheba (17.02.09 16:39) [15]
Частично разделяю твое мнение. Была здесь тема по пустой try/except.
Я привел конкретный пример его необходимости.
В ответ получил, что я безграмотный. Я естественно привел контраргумент.
Нужно было просто передо мной извиниться. Правда это был Мастер. Потом их стало три Мастера и они все вместе продолжали петь в свою дудку.
Совершенно не воспринимая мои аргументы(алгоритм генерализован и логирование генерализованное, т.е. внешнее, и что одни задания не зависят от других). Вообщем в итоге некий Мастер просто начал тереть мои посты, вместе с сутью. Потом я получил бан, первый раз в жизни.
И длительное время не появлялся на форуме и не планирую.
Но для тебя сделал исключение.
Обидно за то, что другие люди будут читать ту тему и воспринимать мышление Мастеров, как исключительно правильное. Что неверно.
← →
sniknik © (2009-02-18 08:15) [72]> Я привел конкретный пример его необходимости.
также как сейчас? вот твой пост ну просто образец "конкретики" без реальной ссылки чтобы можно было проверить, без сути чтобы можно было видеть что там был действительно прав, просто как и тут "верьте мне люди НАДО!"...
при том, что опыт обычно говорит, что пустой/переопределенный на свое сообщение try/except это признак ламеризма в 99% случаев...
> Нужно было просто передо мной извиниться.
думаешь? ну если бы ты был счас чуть конкретнее в описании, я бы тебе поверил, может быть (зависит собственно от сути), но может это наоборот тебе надо было к ним прислушаться и извинятся? что скорее... (имхо. только на основании как предоставлено описание. ветки не помню)
← →
oxffff © (2009-02-18 08:44) [73]
> думаешь? ну если бы ты был счас чуть конкретнее в описании,
> я бы тебе поверил, может быть (зависит собственно от сути),
> но может это наоборот тебе надо было к ним прислушаться
> и извинятся? что скорее... (имхо. только на основании как
> предоставлено описание. ветки не помню)
Ну судя по тому, что Мастера обычно говорят, что так сделать нельзя.
Я стараюсь привести решение. см. oxffff © (17.02.09 11:30) [7].
А где ваше решение? :)
P.S. Тема ушла видимо в архив. Если содейстуете ее нахождению буду благодарен.
← →
Palladin © (2009-02-18 08:48) [74]
> oxffff © (18.02.09 08:44) [73]
заголовок помнишь? конференцию?
← →
brother © (2009-02-18 08:58) [75]из всего выше написаного вывел: дырки нужны, мастера обленились, автор упертый...)))
зы автор, прочитай правила данного форума http://www.delphimaster.ru/forums.shtml#rule и не забывай, что, никто, никому, ничего не должен...
← →
oxffff © (2009-02-18 09:15) [76]
> Palladin © (18.02.09 08:48) [74]
>
> > oxffff © (18.02.09 08:44) [73]
>
> заголовок помнишь? конференцию?
В прочее, в заголовке есть - Пустой, try, except.
Сейчас постараюсь написать пример.
← →
Сергей М. © (2009-02-18 09:16) [77]
> дырки нужны, мастера обленились, автор упертый
Ну не иначе как Номерная сказка № 14)
← →
oxffff © (2009-02-18 09:55) [78]
> sniknik © (18.02.09 08:15) [72]ITask=interface
procedure Execute;
function GetLastError:String;
function GetTaskName:string;
end;
ILogger=interface
procedure Log(const Message:string);
end;
TGeneralizedExecution<TTask:ITask;TLogger:ILogger>=class
public
class procedure DoTasksAndLogIt(const Tasks:array of TTask;const Logers:array of TLogger);static;
end;
procedure DoSafeCallOfUnknownProc(const SomeProc:TProc);
begin
try
SomeProc;
except
end;
end;
class procedure TGeneralizedExecution<TTask, TLogger>.DoTasksAndLogIt(
const Tasks: array of TTask; const Logers: array of TLogger);
var Loger:TLogger;
Task:TTask;
begin
for Loger in Logers do
begin
DoSafeCallOfUnknownProc(
procedure
begin
Loger.Log("Bunch Execution start of nonbounded tasks");
end);
end;
for Task in Tasks do
begin
try
Task.Execute;
for Loger in Logers do
begin
DoSafeCallOfUnknownProc(
procedure
begin
Loger.Log("Task "+Task.GetTaskName+ " is executed ");
end);
end;
except
for Loger in Logers do
begin
DoSafeCallOfUnknownProc(
procedure
begin
Loger.Log("Error "+Task.GetLastError+ " of task "+Task.GetTaskName);
end);
end;
end;
end;
for Loger in Logers do
begin
DoSafeCallOfUnknownProc(
procedure
begin
Loger.Log("Bunch Execution End of nonbounded tasks");
end);
end;
end;
← →
oxffff © (2009-02-18 10:00) [79]
> oxffff © (18.02.09 09:55) [78]
TGeneralizedExecution.DoTasksAndLogIt(
[
...
// "A bunch of unknown tasts"
....
],
[TEmailLoger.create(..),
TDatabaseLogger.create(..),
TTxtLogger.create(..),
// "A bunch of unknown loggers"
....................
]
← →
Игорь Шевченко © (2009-02-18 11:00) [80]oxffff © (18.02.09 10:00) [79]
по новой из пустого в порожнее начнем переливать ? Тебе уже в прошлой теме сказали, что пустой try except ведет к потере информации об ошибках, не вижу смысла снова разводить флейм на пустом месте. Если тебе не нужна информация об ошибках - бога ради, пиши как хочешь и что хочешь, единственное - не стоит убеждать остальных, что это верная дорога.
Страницы: 1 2 3 4 5 вся ветка
Форум: "Прочее";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.053 c