[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: О удалении строки данных из БД (не mysql)
KaFe
Так как SQL базам данных я предпочитаю файлы, то вообще имею мало понятия о внутренней работе самой SQL.

И так вопрос следующий, есть у нас таблица "Example"
И вид у не примерно такой
есть поле login
таблица заполнена значениями, ну например у меня 10 их будет.
Я хочу удалить 7 запись и тут возникает то самый вопрос
Как образом удалить запись из базы:
1.Удаление записи и смещение всех записей
 при этом варианте  записи
до удаления располагались так
1 2 3 4 5 6 7 8 9 10
после удаления
1 2 3 4 5 6 7 8 9


2.Просто удаление записи.
 при этом варианте  записи
до удаления располагались так
1 2 3 4 5 6 7 8 9 10
после удаления
1 2 3 4 5 6 8 9 10


3.Не использовать функцию удаления записей

Помогите rolleyes.gif

P.S:Если что то не понятно то могу пояснить еще подробнее



Спустя 3 минуты, 1 секунда (16.05.2010 - 14:45) waldicom написал(а):
Просто удалять. Как физически расположены данные внутри таблицы Вас воообще не должно волновать.
Важно, чтобы каждая запись в таблице могла быть однозначно идентифицирована. Например с помощью первичного ключа или уникального индекса...

Спустя 9 минут, 54 секунды (16.05.2010 - 14:54) KaFe написал(а):
waldicom у меня база данных не SQL и меня интересует именно физическая сторона вопроса.

Спустя 37 минут, 52 секунды (16.05.2010 - 15:32) waldicom написал(а):
Вы хотите сами спроектировать DBMS? Или я не понял вопроса...

Спустя 9 минут, 16 секунд (16.05.2010 - 15:42) KaFe написал(а):
waldicom БД у меня уже спроектирована(хотя это не БД, а набор абстракций для работы с файлами ,как с БД) и уже имеется код, сейчас надо доработать функцию удаления записи, я и хочу понять как лучше удалять записи. smile.gif

Спустя 1 час, 28 минут, 43 секунды (16.05.2010 - 17:10) Nikitian написал(а):
Для оптимизации скорости работы (а при работе с файлами скорость важна, чтобы была меньше вероятность попадания на блокировки) удаляйте только ссылку на запись, а сами данные оставляйте. Mysql так и делает. Чтобы бороться с фрагментацией данных есть команда `optimize table`.
Хотя если у вас и таблицы смещений нет, то думайте сами =)

//Не изобретайте велосипеды, пользуйтесь зрелыми разработками.

Спустя 22 минуты, 59 секунд (16.05.2010 - 17:33) KaFe написал(а):
Цитата
таблицы смещений
что вы под этим понимаете?


Цитата
//Не изобретайте велосипеды, пользуйтесь зрелыми разработками.

Я не изобретаю велосипед просто, я не хочу работать на SQL, а хочу продолжить на файлах и поэтому решил создать что-типа БД на файлах. Я бы не стал разрабатывать если нашел бы уже готовый проект для использования

Спустя 1 час, 11 минут, 58 секунд (16.05.2010 - 18:45) Nikitian написал(а):
Цитата (KaFe @ 16.05.2010 - 14:33)
Цитата
таблицы смещений
что вы под этим понимаете?

В упрощённом виде 2 хранилища. В одном хранятся данные, но надо знать где начинается одна запись и заканчивается другая. Вот эти данные и хранятся во втором хранилище. Т.е. надо взять запись с внутренним id (по индексу) =25. Смотрим во второе хранилище и видим, что эта запись начинается со смещения 284 байта и имеет размер 15 байт. Вот эту информацию и выбираете. Соответственно если во втором хранилище нет данных о записи с id=25, то и не важно есть ли эти данные там или уже нет физически, а новые данные всегда дописываются в конец хранилища, чтобы не вызывать поломки остальных индексов.

Цитата (KaFe @ 16.05.2010 - 14:33)

Цитата
//Не изобретайте велосипеды, пользуйтесь зрелыми разработками.

Я не изобретаю велосипед просто, я не хочу работать на SQL, а хочу продолжить на файлах и поэтому решил создать что-типа БД на файлах. Я бы не стал разрабатывать если нашел бы уже готовый проект для использования

SQLite? Хотя и пресловутый mySQL хранит данные тоже в файлах, как и большинство других движков, только всё это скрыто за демоном и с данными напрямую клиент не контактирует. В SQLite как раз хранилища управляются клиентом через апи.

Спустя 13 часов, 48 минут, 52 секунды (17.05.2010 - 08:34) KaFe написал(а):
Сейчас понятно что вы понимаете под таблицей смещения, она у меня есть,
что про SQLite, то я идея одна и таже но реализации и свойства бд будут совсем другими .

Спустя 2 часа, 46 минут, 31 секунда (17.05.2010 - 11:21) Nikitian написал(а):
Как боретесь со взаимными блокировками? Какой интерфейс выборок используете? Ваша бд реляционная или key-value?
Интересно же =)

Спустя 19 минут, 8 секунд (17.05.2010 - 11:40) Basili4 написал(а):
БД на файлах.
А вы случайно интерпретатор PHP на бейсике не пишите котрый работает на лично писанной версии ОС. Чето мне кажется Писаная вами БД раз два и рухнет. Посуществу скажу что лучше всего отмчечать записи для удаления. а физ удалять уже позже. Хотя я немогу представить задачу с которой БД не смогла бы справится.

Спустя 1 час, 25 минут, 33 секунды (17.05.2010 - 13:05) KaFe написал(а):
Basili4 нет у меня еще в планах не было писать PHP, а вот ОС пытался,отложил идею из-за недостатка навыков в Ассемблере smile.gif Зато много теории узнал и сейчас призераю Linux и Windows laugh.gif


Короче принципы этой БД такой есть файл YHQ.php, он король в этой базе данных, а именно в нем ссылки на записи, вот примерный вид файла
YHQ.php:
user-nick-1-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-1
user-login-1-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-2
user-pass-1-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-3
user-icq-1-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-4
user-mail-1-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-5
user-site-1-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-6
user-nick-2-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-7
user-login-2-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-8
user-pass-2-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-9
user-icq-2-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-10
user-mail-2-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-11
user-site-2-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-12
user-nick-3-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-13
user-login-3-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-14
user-pass-3-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-15
user-icq-3-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-16
user-mail-3-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-17
user-site-3-mini-hq/ee11cbb19052e40b07aac0ca060c23ee/max600hq.php-18
#000001
#000001
news-theme-2-mini-hq/508c75c8507a2ae5223dfd2faeb98122/max600hq.php-2
news-text-2-big-hq/508c75c8507a2ae5223dfd2faeb98122/text_2.php
news-theme-3-mini-hq/508c75c8507a2ae5223dfd2faeb98122/max600hq.php-3
news-text-3-big-hq/508c75c8507a2ae5223dfd2faeb98122/text_3.php
#000001
#000001


Теория:
Если добавляемая запись больше 600 символов то она сохраняется в отдельный файл, имя которому дается по имени столбца и номеру записи,например user_1.php,это 1 запись из столбца user. иначе если запись до 600 символов то добавляем в отдельный файл max600hq.php эту запись, запоминаем строчку. А потом пишем ссылки на записи в файле YHQ.php
Каждая строка в котором разделяется на значения:
1 - имя таблицы
2 - имя столбца
3 - номер записи в столбце
4- тип записи ( mini или big, это связано с 600 символами)
5- Путь до файла записи (зависит от типа записи)
6- номер строки для типа записи mini

строка #000001 - на данный момент функция удаления вместо удаленных записей ставит данное значение, оно БД не обрабатывается.


Запрос данных из БД:

получение одиночного значение
$a=hq_get_record('user','login',1);

Все записи в столбце
$massiv=hq_get_col('user','login');

Все записи в строке по всем столбцам таблицы
$massiv=hq_get_line('user',1);


Запись данных в БД:

Добавление записи:
hq_add_record('user','login','Тута всякие данные');

Редактирование записи (не удаление)
hq_set_record('user','login',1,'Тута всякие данные);

Спустя 28 минут, 35 секунд (17.05.2010 - 13:34) Basili4 написал(а):
А выборку данных по условию вы производите ну вот к примеру сущ. таблица users с полями Login, password и надо выбрать записи Login="Basili4".

Спустя 11 минут, 41 секунда (17.05.2010 - 13:46) KaFe написал(а):
Basili4 Получить массив с помощь
hq_get_col('user','login'); 
и работай с ним, выбирай чего хочешь.

P.S: Это не SQL, что-бы искать сразу по значениям, здесь надо думать мозгами, хотя вы подали замечательную идею, я попробую реализовать данную функцию

Спустя 1 час, 10 минут, 2 секунды (17.05.2010 - 14:56) glock18 написал(а):
KaFe
Здесь кто-то недавно поднимал вопрос о Кассандре. тоже хотел создать какой-то чудо no-sql велосипед. Уже не помню кто это был, не ты случаем? smile.gif

У no-sql много поклонников, которые говорят примерно то же самое, что и ты. полагаю, что ты просто попал под дурное влияние. имхо если у тебя есть табличная структура (а у тебя она есть), то садиться на велосипед под названием no-sql - большая ошибка. возможен выбор в пользу column-based sql-хранилищ против row-based. в такой ситуации no-sql скорее всего приведет тебя к тому, что ты реализуешь свой sql, только глючный и тормозной. no-sql вообще полезен только если нужно чистое хеш-хранилище.

Спустя 1 час, 9 минут, 51 секунда (17.05.2010 - 16:05) KaFe написал(а):
glock18 спасибо за лекцию о пользе SQL баз, но мне хватает их в колледже по дисциплине "Базы данных".Я не думаю, что вы для меня открыли что то новое. .





Спустя 53 минуты, 8 секунд (17.05.2010 - 16:59) glock18 написал(а):
KaFe
smile.gif кажется, я почти ничего не сказал об sql.

Спустя 22 минуты, 21 секунда (17.05.2010 - 17:21) KaFe написал(а):
вы противопоставили no-SQL , SQL базам данных,разве это не лекция, по бесполезности no-SQL, и все главенстве SQL.

Ладно мы перешли во флуд, давайте по теме.Мне нужен ответ, а не тупое балабольство, о бесполезности моего проекта, давайте научимся помогать. wink.gif

Пожалуйста помогите)))

Спустя 32 минуты, 22 секунды (17.05.2010 - 17:53) Nikitian написал(а):
KaFe, вам не о главенстве SQL говорят, а о том, что ваша разработка выльется либо в иерархическую субд, для которой потребуется примерно такой же мощный и гибкий, как sql язык запросов, либо упростите её до key-value. Во втором случае апи взаимодействия минимальное, в первом ничего лучше и гибче sql не придумало человечество.

Я вам в самом начале порекомендовал помечать, а не удалять. Обосновал это необходимостью делать операции как можно быстрее, а физическое удаление и перестройка индексов - это не быстрое занятие.
Кстати, так и не ответили, как решили бороться с файловыми блокировками взаимного доступа. А в вашем случае это актуально.

Да, и не надо национальный признак использовать в общении - это лишнее.

glock18, каждый в своей жизни должен написать велосипед - это не для продакшна, а для наработки опыта решения нетривиальных задач. Покажите мне человека, который не изобретал велосипед - тот человек ничего и не делал видимо wink.gif

Спустя 11 минут, 34 секунды (17.05.2010 - 18:05) waldicom написал(а):
Цитата (Nikitian @ 17.05.2010 - 16:53)
каждый в своей жизни должен написать велосипед - это не для продакшна, а для наработки опыта решения нетривиальных задач. Покажите мне человека, который не изобретал велосипед - тот человек ничего и не делал видимо

Только велосипед велосипеду рознь.

Спустя 17 минут, 14 секунд (17.05.2010 - 18:22) KaFe написал(а):
Цитата (Nikitian @ 17.05.2010 - 14:53)
Кстати, так и не ответили, как решили бороться с файловыми блокировками взаимного доступа. А в вашем случае это актуально.

Я задумывался над этим вопросом, но еще не перешел к его решению и реализации.

Цитата (waldicom @ 17.05.2010 - 15:05)
Только велосипед велосипеду рознь.
waldicom вы правы велосипеды бывают разные, но есть веское НО! они все равно остаются велосипедами biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.