Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2013 23:00:49

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

Вопрос наверное не только про Джангу а про бд(mysql) вообще, хотя может джанга какие то свои особенности проявляет.
Есть список в бд (который видимо хранится в строковом типе поля). К нему периодически в определенные по индексу места будут добавляться новые элементы, какие-то будут удаляться. Существуют ли методы делать это быстрее чем заново переписывать всё поле каждый раз? Если такие методы существуют, какой с ними выигрыш в скорости?



Офлайн

#2 Фев. 27, 2013 10:03:23

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

Зачем делать такое “изящество” в виде хранения списка в виде строки? В подобном случае вы не сможете по нему нормально фильтровать записи и делать кучу других действий.

Как вариант предлагаю либо завязаться на конкретной СУБД в частности PostgreSQL и использовать его PGArray: https://www.djangopackages.com/grids/g/arrayfield/
либо чтобы не завязываться на конкретную СУБД сделать отдельную модель у которой будет ссылка на модель в которой вы собирались хранить список в строковом представлении а также нужные вам поля к примеру id.



Отредактировано alafin (Фев. 27, 2013 10:12:10)

Офлайн

#3 Фев. 27, 2013 11:35:42

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

alafin
В подобном случае вы не сможете по нему нормально фильтровать записи и делать кучу других действий.
Ага я про это и спрашивал. То есть нет такого способа общения с полем в mysql как с обычным списком. Про array в PostgreSQL слышал, для mySql не встречали такого?

alafin
сделать отдельную модель у которой будет ссылка на модель в которой вы собирались хранить список в строковом представлении
Если я вас правильно понял, у меня все так и есть. Есть модель в которая и хранит такие списки в строковом состоянии. Каждый раз обращаясь к определенному полю с целью проучить из строки фрагмент, или записать фрагмент туда, требуется прежде извлечь строку, изменить ее, затем снова записать в поле. Я интересуюсь способ редактировать содержимое строки, не извлекая её всю. Предложенный вами способ не позволяет так делать. Или я вас не правильно понял



Офлайн

#4 Фев. 27, 2013 11:59:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

Зачем список то?

class Foo(Model):
    name = CharField(....)
class List(Model):
    list_item = CharField(....) # Или ItegerField или любой другой Field
    foo = ForeignKey(Foo)

Собственно, вот и весь список. Добавляйте, удаляйте, делайте что угодно без извращений.

foo = Foo.objects.get(name='bla-bla'))
lst = List.objects.filter(foo=foo) # Список
new_item = List.objects.create(foo=foo, list_item='new_record') # Добавляем
new_item.list_item='newest'
new_item.save()# Изменяем
List.objects.get(foo=foo, list_item='new_record').delete() # Удаляем



Офлайн

#5 Фев. 27, 2013 12:28:57

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

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



Офлайн

#6 Фев. 27, 2013 12:45:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

ИМХО это бред.



Офлайн

#7 Фев. 27, 2013 13:07:53

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

kvadrat
но вопрос то именно такой - найти способ взаимодействия с одним полем(не знаю уже какого типа) не извлекая его полностью
MySQL такого не умеет.
Я вам больше скажу, ни одна СУБД такого не делает, т.к. минимум, что можно считать - одна запись, если ее размер совпадает с размером страницы БД и одновременно с размером кластера диска.
Если БД находится в памяти или на SSD, все равно считывается вся запись.
При обновлении поля, обновляется все поле целиком.
При получении части поля (часть строки, например) считывается все поле целиком.

ЗЫ
Не морочьте себе и нам :) голову, я очень сомневаюсь, что узкое место у вас - обновление поля в записи.
Это может быть только при использовании BLOB-полей.

Удостоверьтесь, что у вас используется таблица без сжатия, это будет гарантия отсутствия дефрагментации записей для вашей задачи.



Офлайн

#8 Фев. 27, 2013 13:22:26

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Скорость обновления строки mySql

FishHook
Зачем список то?
class Foo(Model):
name = CharField(….)
class List(Model):
list_item = CharField(….) # Или ItegerField или любой другой Field
foo = ForeignKey(Foo)

Собственно, вот и весь список. Добавляйте, удаляйте, делайте что угодно без извращений.

судя по описанной задаче, автору будет достаточно одной модели:
class List(Model):
    item = CharField(....)

Офлайн

#9 Фев. 27, 2013 14:58:41

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

kvadrat
Если я вас правильно понял, у меня все так и есть.
Нет, вы меня не правильно поняли, я имел в виду вариант который был предложен FishHook а именно:

class Foo(Model):
    name = CharField(....)
class List(Model):
    list_item = CharField(....) # Или ItegerField или любой другой Field
    foo = ForeignKey(Foo)

Такой вариант более правильный нежели хранить списки в строковом представлении.



Офлайн

#10 Фев. 28, 2013 19:36:12

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Скорость обновления строки mySql

всё понял. бд такого не может. спасибо за ответы



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version