символ по сравнению с varchar для производительности в базе данных запаса

Я нашел githubGist, чтобы явно установить ваш часовой пояс на RailsAdmin:

# Credits for https://gist.github.com/jackdesert/7090731
# rails_admin.rb

require 'rails_admin/config/fields/base'

module RailsAdmin
  module Config
    module Fields
      module Types
        class Datetime < RailsAdmin::Config::Fields::Base

           def value
             value_in_default_time_zone = bindings[:object].send(name)
             return nil if value_in_default_time_zone.nil?
             pacific_time_zone = ActiveSupport::TimeZone.new('Europe/Paris')
             value_in_default_time_zone.in_time_zone(pacific_time_zone)
           end
        end
      end
    end
  end
end

Для этого требуется ваш часовой пояс конфигурации в файлах staging.rb и production.rb, и вы должны предварительно скомпилировать ресурсы в вашем развертывании [114 ]

12
задан morgb 7 October 2016 в 15:07
поделиться

5 ответов

Я определенно не воссоздал бы базу данных каждый раз. Вместо этого я сделал бы следующее:

  • читайте в обновлении/файле снимка и создайте некоторых основанных на объектах на каждой строке.
  • поскольку каждая строка получает (уникальное) имя символа/опции и установила это в базе данных

Если бы это был я, то я также имел бы в кэше памяти всех символов и данных текущей цены.

Ценовые данные никогда не являются интервалом - можно использовать символы.

Название компании, вероятно, не уникально, поскольку существует много опций для конкретной компании. Это должно быть индексом, и можно оставить свободное место просто с помощью идентификатора компании.

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

Наличие доступа запроса для других пользователей является также причиной НЕ продолжать удалять и создавать базу данных.

1
ответ дан 2 December 2019 в 03:22
поделиться

Если фактические данные в поле могут варьироваться много по размеру, varchar лучше, потому что это приводит к меньшим записям, и меньшие записи означают более быстрый DB (больше записей может вписаться в кэш, меньшие индексы, и т.д.). По той же причине, с помощью меньшего ints лучше, если Вам нужна максимальная скорость.

OTOH, если различие является небольшим, например, поле, имеет максимум 20 символов, и большинство записей на самом деле является почти 20 символами долго, то символ лучше, потому что это позволяет некоторую дополнительную оптимизацию DB. Однако это действительно только имеет значение, верно ли это для ВСЕХ полей в таблице, потому что затем у Вас есть записи фиксированного размера. Если скорость является Вашим основным беспокойством, это могло бы даже стоить того для перемещения любых полей нефиксированного размера в отдельную таблицу, если у Вас есть запросы, которые используют только поля фиксированного размера (или если у Вас только есть запросы ружья).

В конце трудно сделать вывод, потому что много зависит от схем доступа Вашего реального приложения.

6
ответ дан 2 December 2019 в 03:22
поделиться

В MyISAM существует некоторое преимущество для создания записей фиксированной ширины. VARCHAR является переменной шириной. CHAR является фиксированной шириной. Если Ваши строки имеют только типы данных фиксированной ширины, то целая строка является фиксированной шириной, и MySQL получает некоторое преимущество, вычисляющее необходимые площади и смещение строк в той таблице. Тем не менее преимущество может быть небольшим, и это едва стоит возможного крошечного усиления, которое перевешивается другими затратами (такими как эффективность кэша) от наличия фиксированной ширины, заполненные столбцы CHAR, где VARCHAR сохранит более сжато.

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

Относительно INT (7) по сравнению с INT (11), это не важно устройству хранения данных или производительности. Это - распространенное заблуждение, что аргумент MySQL типу INT имеет какое-либо отношение к размеру данных - это не делает. Тип данных int MySQL всегда - 32 бита. Аргумент в круглых скобках относится к тому, сколько ЗАПОЛНЯЮТ НУЛЯМИ цифры, чтобы заполнить при отображении значения с. Например, INT (7) отобразится 0001234, где INT (11) отобразится 00000001234. Но это дополнение только происходит, поскольку значение отображено, не во время устройства хранения данных или математического вычисления.

33
ответ дан 2 December 2019 в 03:22
поделиться

Учитывая Ваши системные ограничения я предложил бы varchar начиная с чего-либо, что Вы делаете с данными, должен будет разместить любое дополнение, Вы помещаете на месте для использования символа фиксированной ширины. Это означает больше кода где-нибудь, который является больше для отладки, и более потенциальный для ошибок. Это сказанное:

Главное узкое место в Вашем приложении происходит из-за отбрасывания и воссоздания Вашей базы данных каждые пять минут. Вы не собираетесь вытаскивать много выигрыша в производительности из микроулучшений как предпочитание символа по varchar. Я полагаю, что у Вас есть некоторые более серьезные архитектурные проблемы для обращения вместо этого. – Принцесса

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

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

4
ответ дан 2 December 2019 в 03:22
поделиться

Также помните, что создание баз данных зависит от того, какую реальную реализацию БД вы используете. Если вы когда-нибудь перейдете с MySQL, скажем, на Postgresql, то обнаружите очень неприятный факт, что создание баз данных в postgresql - сравнительно медленная операция. Это на порядки медленнее, чем, например, чтение и запись строк таблицы.

Похоже, что сначала нужно решить проблему с дизайном приложения, прежде чем оптимизировать его производительность, выбирая правильные типы данных.

.
1
ответ дан 2 December 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: