Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 20 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 64566 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #75 - 26. Октября 2007 :: 09:27
Печать  
orefkov писал(а) 26. Октября 2007 :: 09:23:
И твою точку зрения, что это нормально, они бы тебе запихали глубоко.
Согласись, это не нормально, когда изменения, сделанные одним юзером, сбивают выборку у другого.
Человек вправе ожидать, что после "А" будет идти "Б", чего бы другие там в базе не творили.

Да ладно! Стоял человек на некотором элементе, собирался с ним работать. А тут из-за твоих представлений о том, как должны работать табличные поля, элемент пропал с глаз долой. Так что не все так просто, как тебе кажется. В разных случаях нужно разное поведение.

Uzhast писал(а) 26. Октября 2007 :: 08:52:
orefkov писал(а) 26. Октября 2007 :: 06:12:
А "проскок" N строк в текущей реализации ODBC-поставщика очень даже можно сделать.

select max(key) from (select top N key from lalala where key > storedkey order by key) topNkeys
либо
select top 1 key from (select top N key from lalala where key > storedkey order by key) topNkeys order by key desc


Вот-вот, тормоза на ровном месте. Особенно, если N = 150000, например (или у тебя другие данные?). А в случае индексов пропустить нужное количество строк можно практически мгновенно.

Скажу тебе по секрету, что когда работаешь с SQL-сервером, для любых действий надо делать запрос.
И зря ты думаешь, что такой запрос напряжет сервер. Он, сука, умный, и поймет, что от него хотят всего-лишь seek and skip. [/quote]
Может быть. А, может, и нет. Зависит от сервера. И, в любом случае, вместо прозрачного алгоритма работы с данными получаем крокодила.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #76 - 26. Октября 2007 :: 09:29
Печать  
Uzhast писал(а) 26. Октября 2007 :: 09:21:
Орефков, не позорься. Итак, читаем матчасть:
Цитата:
GO | GOTO Command
...
Parameters
RECORD nRecordNumber


Specifies the physical record number to move the record pointer to. You can omit GO or GOTO entirely and specify just the record number. If you specify just the record number, you can move the record pointer only within the current work area.

Орефков! Физический номер записи не имеет НИКАКОГО отношения к индексу, как тебе почему-то кажется. Ну никакого! Это действительно ФИЗИЧЕСКИЙ номер записи - т.е. элементарный порядковый номер записи в файле. Эти номера не зависят от индекса - они зависят от ПОРЯДКА ДОБАВЛЕНИЯ ЗАПИСЕЙ В ТАБЛИЦУ. Дошло?

Это ты бы лучше не позорился.
Ну перешел ты в файле на нужную запись.
На кой черт мне записи в ПОРЯДКА ДОБАВЛЕНИЯ ЗАПИСЕЙ В ТАБЛИЦУ?
Мне надо дальше двигатся в порядке ИНДЕКСА.
И как ты найдешь, с какого места в ИНДЕКСЕ надо возобновить обход?
Только либо перебрав весь индекс, ища нужную запись,
либо сформировав ключ этой записи, найти этот ключ в индексе, и двигать по индексу, ища нужную запись по номеру.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #77 - 26. Октября 2007 :: 09:34
Печать  
orefkov писал(а) 26. Октября 2007 :: 09:29:
Это ты бы лучше не позорился.
Ну перешел ты в файле на нужную запись.
На кой черт мне записи в ПОРЯДКА ДОБАВЛЕНИЯ ЗАПИСЕЙ В ТАБЛИЦУ?
Мне надо дальше двигатся в порядке ИНДЕКСА.
И как ты найдешь, с какого места в ИНДЕКСЕ надо возобновить обход?
Только либо перебрав весь индекс, ища нужную запись,
либо сформировав ключ этой записи, найти этот ключ в индексе, и двигать по индексу, ища нужную запись по номеру.

Орефков, ну это уже не смешно. Честное слово. Ну ты же всегда был умным мужиком. А сейчас мне тебе приходится объяснять элементарные вещи. Мне же неудобно. Ты же вроде авторитет, а простых вещей не знаешь. Может, лучше в личку перенести обсуждение?

Я перехожу по физическому номеру записи на нужную. Далее я делаю SKIP в нужном направлении. Как работает SKIP? Вот так:
Цитата:
Remarks
If the table has a master controlling index tag or index file, SKIP moves the record pointer to the record determined by the index sequence.

Вкуриваешь? Фактически, номер записи - это закладка. Вот и все.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #78 - 26. Октября 2007 :: 09:37
Печать  
Стоять! Какая еще личка? Нам всем интересно Улыбка
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #79 - 26. Октября 2007 :: 09:48
Печать  
Uzhast писал(а) 26. Октября 2007 :: 09:34:
orefkov писал(а) 26. Октября 2007 :: 09:29:
Это ты бы лучше не позорился.
Ну перешел ты в файле на нужную запись.
На кой черт мне записи в ПОРЯДКА ДОБАВЛЕНИЯ ЗАПИСЕЙ В ТАБЛИЦУ?
Мне надо дальше двигатся в порядке ИНДЕКСА.
И как ты найдешь, с какого места в ИНДЕКСЕ надо возобновить обход?
Только либо перебрав весь индекс, ища нужную запись,
либо сформировав ключ этой записи, найти этот ключ в индексе, и двигать по индексу, ища нужную запись по номеру.

Орефков, ну это уже не смешно. Честное слово. Ну ты же всегда был умным мужиком. А сейчас мне тебе приходится объяснять элементарные вещи. Мне же неудобно. Ты же вроде авторитет, а простых вещей не знаешь. Может, лучше в личку перенести обсуждение?

Я перехожу по физическому номеру записи на нужную. Далее я делаю SKIP в нужном направлении. Как работает SKIP? Вот так:
Цитата:
Remarks
If the table has a master controlling index tag or index file, SKIP moves the record pointer to the record determined by the index sequence.

Вкуриваешь? Фактически, номер записи - это закладка. Вот и все.

Ты мануалы-то не только читай, мозг включай иногда Улыбка
Полезно иногда подумать, как же работает это волшебство.
Номер записи - это закладка в файле, но никак не в ИНДЕКСЕ.
Так  что скорее всего, унутре все происходит так:
Когда ты делаешь GOTO номер, фокс позиционирует указатель в файле-ДАННЫХ на нужную запись.
После этого, если для таблицы установлен порядок обхода по индексу, ему просто НЕОБХОДИМО перепозиционировать указатель в файле-ИНДЕКСЕ на узел, СООТВЕТСТВУЮЩИЙ ЭТОЙ ЗАПИСИ В ИНДЕКСЕ.
Иначе откуда он будет делать дальнейший SKEEP ?
Как это делает Фокс?
Есть такая инфа?
Скорее всего он формирует индексный ключ записи, на которую он перешел в ФАЙЛЕ, и ищет этот ключ в ИНДЕКСНОМ ФАЙЛЕ. При этом, если ключ не уникален, ему приходится НЕМНОЖКО ПРОСКАНИРОВАТЬ индекс в пределах этого ключа, чтобы точно найти тот узел, в котором номер записи соответствует номеру записи, на который он перешел в файле.
А это оптимальней всего делать, когда неуникальные ключи в индексе еще дополнительно упорядочены по номеру записи.
Что собственно, меня и интересовало.
И что собственно, мы видим на практике - действительно, неуникальные ключи в индексном файле идут в порядке физических номеров. И так как мои логические построения привели к тому-же выводу, что и существуюет на практике, то в них скорее всего большая доля истины, чем в бездумном цитировании мануалов.
PS
И скореевсего поэтому ключ в cdx-файле лежит в виде строки
СамКлюч + (Четыре символа - номер записи в hex-нотации)
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #80 - 26. Октября 2007 :: 09:50
Печать  
Нет, блин, я с тебя фигею...
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #81 - 26. Октября 2007 :: 09:56
Печать  
Uzhast писал(а) 26. Октября 2007 :: 09:27:
Да ладно! Стоял человек на некотором элементе, собирался с ним работать. А тут из-за твоих представлений о том, как должны работать табличные поля, элемент пропал с глаз долой.

Вот именно - в ТП исчезнет ТОЛЬКО элемент, измененный другим юзером.
А в 1С на курсорах - и этот элемент исчезает, и соседние начинают вести себя крайне неадекватно.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #82 - 26. Октября 2007 :: 09:57
Печать  
orefkov писал(а) 26. Октября 2007 :: 09:48:
Ты мануалы-то не только читай, мозг включай иногда Улыбка

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

orefkov писал(а) 26. Октября 2007 :: 09:48:
Так  что скорее всего, унутре все происходит так:
Когда ты делаешь GOTO номер, фокс позиционирует указатель в файле-ДАННЫХ на нужную запись.
После этого, если для таблицы установлен порядок обхода по индексу, ему просто НЕОБХОДИМО перепозиционировать указатель в файле-ИНДЕКСЕ на узел, СООТВЕТСТВУЮЩИЙ ЭТОЙ ЗАПИСИ В ИНДЕКСЕ.
Иначе откуда он будет делать дальнейший SKEEP ?
Как это делает Фокс?
Есть такая инфа?
Скорее всего он формирует индексный ключ записи, на которую он перешел в ФАЙЛЕ, и ищет этот ключ в ИНДЕКСНОМ ФАЙЛЕ. При этом, если ключ не уникален, ему приходится НЕМНОЖКО ПРОСКАНИРОВАТЬ индекс в пределах этого ключа, чтобы точно найти тот узел, в котором номер записи соответствует номеру записи, на который он перешел в файле.

Шаткое предположение. Не обязательно, что все так и есть. Можно построить элементарное дерево для номеров строк. И никакие индексные выражения тогда строить не надо.

orefkov писал(а) 26. Октября 2007 :: 09:48:
А это оптимальней всего делать, когда неуникальные ключи в индексе еще дополнительно упорядочены по номеру записи.
Что собственно, меня и интересовало.
И что собственно, мы видим на практике - действительно, неуникальные ключи в индексном файле идут в порядке физических номеров.

Сомнительный вывод из шаткого предположения.

orefkov писал(а) 26. Октября 2007 :: 09:48:
И так как мои логические построения привели к тому-же выводу, что и существуюет на практике, то в них скорее всего большая доля истины, чем в бездумном цитировании мануалов.

Ну да, лучше бездумно делать логические выводы на пустом месте вместо того, чтобы нормально прочитать мануал.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #83 - 26. Октября 2007 :: 10:03
Печать  
Цитата:
Можно построить элементарное дерево для номеров строк. И никакие индексные выражения тогда строить не надо.

Можно и левое ухо правой рукой чесать Улыбка
Никто не спорит, что такое дерево можно построить.
Но во закавыка - в cdx-файле его нет. Какая жалость.
А делать его в памяти?
Ну, в однопользовательской среде почемы бы и нет, для небольших файлов.
Но стоит только вспомнить, что файл могут редактировать несколько юзеров, и становится сразу понятно, что дерево в памяти здесь не поможет.
Так что продолжай зубрить мануалы и верить в волшебников.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #84 - 26. Октября 2007 :: 10:06
Печать  
orefkov писал(а) 26. Октября 2007 :: 10:03:
Так что продолжай зубрить мануалы и верить в волшебников.

Дожили. Орефков издевается над изучением мануалов  Улыбка Я фигею (с)
Нормальный мужик честно бы признал свое поражение. Но ты считаешь это для себя невозможным и предпочитаешь издеваться. У тебя явные проблемы с завышенной самооценкой.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #85 - 26. Октября 2007 :: 10:09
Печать  
Uzhast писал(а) 26. Октября 2007 :: 10:06:
orefkov писал(а) 26. Октября 2007 :: 10:03:
Так что продолжай зубрить мануалы и верить в волшебников.

Дожили. Орефков издевается над изучением мануалов  Улыбка Я фигею (с)
Нормальный мужик честно бы признал свое поражение. Но ты считаешь это для себя невозможным и предпочитаешь издеваться. У тебя явные проблемы с завышенной самооценкой.

Нет, я всегда помню, что вижу дальше лишь потому, что я карлик, стоящий на плечах гигантов.
И издеваюсь я не над изучением мануалов, а над их бездумным зубрением, без каких-либо попыток понять, что за ними стоит, и как это работает на самом деле.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #86 - 26. Октября 2007 :: 10:25
Печать  
orefkov писал(а) 26. Октября 2007 :: 10:09:
И издеваюсь я не над изучением мануалов, а над их бездумным зубрением, без каких-либо попыток понять, что за ними стоит, и как это работает на самом деле.

У тебя не то что зубрения, у тебя элементарного знания мануалов нет. И ты это в этой ветке блестяще продемонстрировал. Ты показал, что не знаешь ни что такое физический номер записи, ни что существует возможность перехода от физ. номера к упорядоченной выборке. Продолжай огрызаться дальше. Но фактов это не изменит.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #87 - 26. Октября 2007 :: 10:45
Печать  
Братцы, мне очень нравится сама дискуссия и ваше витруозное владение русским языком и разговорной речью.
Совершенно искренне, иные обороты просто завораживает.

Но не надо торопиться.
Возможно стоит сделать некоторые тесты, которые подтверждают эффективность или неэффективность определенного подхода для DBF.

Скажем, для SQL мне не удалось для упорядочивания и для поиска (т.е. при проверке идеи разделения функций ключей) получить два Index Seek.
Только Index Seek + Index Scan.
Либо Index Scan + Bookmark lookup по индексу упорядочивания.
Это для двух индексов - уникальному (для позиционирования) и неуникальному для упорядочивания.

Для ИТ позиционирование в индексе по номеру физической записи - это также index scan, либо вычисление ключа + index seek + небольшой scan.

SQL, кстати, также мог бы делать index seek + index seek + небольшой scan, но не хочет.

Как обстоят дела для DBF - надо исследовать.
По вашей дискуссии однозначные выводы сделать пока нельзя - значит не надо ее завершать на полдороге.


P.S.
Разбив шахматную доску о голову оппонента сложно выиграть партию.
У меня обычно не получалось, даже когда я был абсолютно прав.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #88 - 26. Октября 2007 :: 11:07
Печать  
kms писал(а) 26. Октября 2007 :: 10:45:
Только Index Seek + Index Scan.
Либо Index Scan + Bookmark lookup по индексу упорядочивания.

index scan появляется так как запрос получается ранжированый - с этого места по вооон то он сканирует индекс.
bookmark появляется только из-за того, что не все данные, которые ты просишь показать в ТП, лежат в индексе. Поэтому скуль спукается к самим данным.
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: 1sqlite
Ответ #89 - 26. Октября 2007 :: 11:12
Печать  
Uzhast - ты меня извини, но я в этом споре поддерживаю Орефкова. Ибо его точка зрения для меня более убедительна. Например тот алгоритм, про который ты говоришь "шаткое предположение" - совпадает с тем, который реализовал бы я, если б мне пришлось решать подобную задачу.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 20
ОтправитьПечать