Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2014, 22:29   #11
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,776
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Вопрос к ТС - а на фига вообще массив в одно поле записывать?
А теперь перечитай ответ #6. А то все тут умные собрались, аж зашибись, один я флудер.
Vapaamies вне форума Ответить с цитированием
Старый 07.09.2014, 02:04   #12
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Вопрос к ТС - а на фига вообще массив в одно поле записывать?
грубо говоря это идентификаторы размером 4 байта, порядковые номера, могут идти не по порядку, поэтому и надо их записывать, без переходов, пробелов, #13#10, и тд. разделяться они ничем не будут. Мне надо просто записать очень длинный набор байт в ячейку
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 07.09.2014, 09:16   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мне надо просто записать очень длинный набор байт в ячейку
Смотри. Тебе предложили два варианта:

1) Записывать в BLOB потоком некий набор чисел (по факту байт), потом так же считывать придется. Как любой поток байт.

2) Создать некую таблицу у которой будет всего два поля: Поле, в котором есть код записи в главной таблице и поле с элементом массива.

Второе будет выглядеть примерно так:

Главная:
1 Вася
2 Мася

Массив:
1 1
1 2
1 3
2 56
2 78

Тогда получится что с Васей связан массив 1,2,3 а с Масей 56,78.
Это естесственная форма хранения данных для реляционных СУБД, и в общем то у нее есть свои преимущества перед BLOB хранением. Особенно если нужно выбирать не весь массив, а только его диапазон, скажем у Васи отобрать из массива целых те что более 2. С BLOB полями тебе бы пришлось считывать весь поток чисел, а уже потом на клиенте их рассматривать. Плюс сюда же меньший размер базы, по сравнению с BLOB.

Поэтому повторю вопрос Аватара:
Цитата:
а на фига вообще массив в одно поле записывать?
Т.е. какова задача? Почему это понадобилось?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2014, 13:27   #14
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Т.е. какова задача? Почему это понадобилось?
Считывание из нескольких ячеек думаю все же больше времени занимать будет, но я подумаю над решением, тут необходима скорость. Собственно это будет контакт лист пользователей, делаю что то типа мессенджера. Данные посылаться будут целиком, на клиенте разбираться по 4 байта, так что хранить можно целиком в ячейке, но при изменении уже либо дописывать, либо затирать лишние байты. Пока в файл записываю но будет ли такая возможность на *nix не знаю

Нужно как можно меньше использовать хдд, мало ли 100500 клиентов будет, и каждая 1,2,3 в базе уже будет иметь вес
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 07.09.2014, 15:44   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Считывание из нескольких ячеек думаю все же больше времени занимать будет
Нет если правильно проиндексировать.
Цитата:
Собственно это будет контакт лист пользователей,
В таком случае мой совет про BLOB неудачный.
Цитата:
но при изменении уже либо дописывать, либо затирать лишние байты
Цитата:
Нужно как можно меньше использовать хдд
Вот как раз изменение всего BLOB будет хард грузить больше чем изменение одной-двух записей, если хранить массив в таблице.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2014, 17:22   #16
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,776
По умолчанию

NEoMASTERR
БД -- не массив. Не нужно рассматривать БД как массив. БД -- нечто большее чем массив. Изучайте матчасть.

Цитата:
Сообщение от Stilet Посмотреть сообщение
мой совет про BLOB неудачный.
Как обычно.
Vapaamies вне форума Ответить с цитированием
Старый 07.09.2014, 21:54   #17
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
NEoMASTERR
БД -- не массив. Не нужно рассматривать БД как массив. БД -- нечто большее чем массив. Изучайте матчасть.


Как обычно.

Я разве говорил что БД - массив?

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вот как раз изменение всего BLOB будет хард грузить больше чем изменение одной-двух записей, если хранить массив в таблице.
8кб всё же проще взять из ячейки чем пересчитать 2048 записей, все изменения будут через кеш, и не очень часто. И Мы ушли с темы) "как записать/считать набор байт в ячейку программно?"
Здравствуйте

Последний раз редактировалось Stilet; 07.09.2014 в 22:31.
NEoMASTERR вне форума Ответить с цитированием
Старый 07.09.2014, 23:30   #18
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,776
По умолчанию

Цитата:
Сообщение от NEoMASTERR Посмотреть сообщение
8кб всё же проще взять из ячейки чем пересчитать 2048 записей, все изменения будут через кеш, и не очень часто.
В моих глазах выглядит как типичная ошибка планирования. Не нужно брать на себя функциональность СУБД, берясь за работу с СУБД. СУБД или используется целиком, или всё делается на файлах, как и раньше.
Vapaamies вне форума Ответить с цитированием
Старый 08.09.2014, 00:32   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как записать/считать набор байт в ячейку программно?
Сохраняем:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var 
  blob: TBlobStream; i:integer;
begin 
  blob := <Твой Датасет>.CreateBlobStream(<Твой Датасет>.FieldByName('YOUR_BLOB'), bmWrite); 
    blob.Seek(0, soFromBeginning);
    blob.write(Length(a),4); //Записываем кол-во элементов массива
    for i:=Low(a) to High(a) do 
     blob.write(a[i],sizeof(a[i])); //Записываем элементы массива
    blob.Free 
end;
Читаем:
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var 
  blob: TBlobStream; i:integer;
begin 
  blob := <Твой Датасет>.CreateBlobStream(<Твой Датасет>.FieldByName('YOUR_BLOB'), bmRead); 
    blob.Seek(0, soFromBeginning);
    blob.read(i,4); //Читаем кол-во элементов массива
    SetLength(a,i);
    for i:=Low(a) to High(a) do 
     blob.read(a[i],sizeof(a[i])); //Записываем элементы массива
    blob.Free 
end;
Это с потолка, не проверял. За основу взял: [url]http://delphiworld.narod.ru/base/blob_fields_save_read_
I'm learning to live...

Последний раз редактировалось Stilet; 08.09.2014 в 00:38.
Stilet вне форума Ответить с цитированием
Старый 08.09.2014, 06:04   #20
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

PHP код:
var
  
i:integer;
  
blob:TADOBlobStream;
begin
  users
.Edit;
  
blob:=TADOBlobStream.Create(TBlobField(users.fieldbyname('cl')),bmWrite);
  
blob.Seek(0soFromBeginning);
  
i:=2000;
  
blob.write(i,4);

  for 
i:=0 to 1999 do
  
begin
    blob
.write(i,sizeof(i));
  
end;

  
blob.Free;
  
users.post
PHP код:
var
  
blob:TADOBlobStream;
  
buf:array of Char;
  
i:integer;
begin
  blob
:=TADOBlobStream.Create(TBlobField(users.fieldbyname('cl')),bmRead);
  
blob.Seek(0soFromBeginning);

  
blob.Read(i,4);
  
SetLength(buf,i);
  
blob.Read(buf[0],i);

  
blob.Free

Благодарю за помощь)
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись не в ту ячейку Leks123 PHP 11 14.08.2013 04:34
запись данных в ячейку albih Microsoft Office Excel 5 14.07.2011 20:07
Запись данных в ячейку orkus Помощь студентам 15 30.03.2010 16:15
Запись числа типа инт в ячейку двумерного массива типа char AxenicX Помощь студентам 1 25.09.2009 00:35
редактировать запись в ADO Kara1989 БД в Delphi 4 22.07.2009 15:52