Ознакомьтесь с общим шаблоном обновления
var paths = svg.selectAll('path')
.data(pathsData)
var pathsEnter = paths.enter()
.append('path')
.attr("class", "line")
.attr('d', line)
На основе фотографии, которой вы поделились в комментариях
[1121 ]
вычисляют уникальный массив всех значений service
. (в вашем примере это будет [4, 8]
, но оно будет управляться данными.)
Затем используйте этот массив в качестве данных для группы service lines
.
Расположите каждую строку в соответствии с вашим yScale.
Бонус: создайте цветовую шкалу для динамического определения цвета обводки линии на основе ее значения в массиве значений обслуживания.
const data = [{service: 4, otherData: '...'},{service: 4, otherData: '...'},{service: 8, otherData: '...'},{service: 8, otherData: '...'},{service: 12, otherData: '...'},{service: 12, otherData: '...'}
]
// Get a unique array from data
const serviceData = Array.from(new Set(data.map(a => a.service)));
// create a color scale if you need
const color = d3.scaleLinear().domain(serviceData).interpolate(d3.interpolateHcl).range([d3.rgb("#ff0000"), d3.rgb('#257c00')]);
const width = 500;
const height = 300;
const svg = d3.select('body').append('svg').attr('width', width).attr('height', height)
// Bind to data
const lines = svg.append('g').attr("class", "service-lines-group").selectAll('line')
.data(serviceData)
// Enter selection - create lines for each data point
const linesEnter = lines.enter()
.append('line')
.attr("class", "service-line")
.attr('x1', 0)
.attr('x2', width)
.attr('y1', d => d * 10)
.attr('y2', d => d * 10)
.attr('stroke', (d, i) => {
return color(d)
})
MySQL Performance Blog является фантастическим ресурсом. А именно, это сообщение касается основ надлежащей настройки InnoDB-определенных параметров.
Я также нашел что версия PDF MySQL Reference Manual быть важным. Глава 7 касается общей оптимизации, и разделите 7,5 покрытий определенная для сервера оптимизация, с которой можно играть.
От звука Вашего сервера кэш запроса может иметь ОГРОМНУЮ ценность для Вас.
Справочник также предоставляет Вам некоторую большую подробную информацию относительно медленных запросов, кэшей, оптимизации запросов и даже анализа поиска на диске с индексами.
Это может стоить Вашего времени для изучения мультиосновной репликации, разрешение Вам заблокировать один сервер полностью и работать ОПТИМИЗИРУЕТ/АНАЛИЗИРУЕТ, не получая удар производительности (поскольку 95% Ваших запросов являются чтениями, другой сервер мог управлять записями очень хорошо).
Раздел 12.5.2.5 покрытия ОПТИМИЗИРУЮТ ТАБЛИЦУ подробно и 12.5.2.1 покрытия, АНАЛИЗИРУЕТ ТАБЛИЦУ подробно.
Обновите для своих редактирований/акцента:
На вопрос № 2 легко ответить. Из справочника:
ОПТИМИЗИРУЙТЕ:
ОПТИМИЗИРУЙТЕ ТАБЛИЦУ, должен использоваться, если Вы удалили значительную часть таблицы или если Вы внесли много изменений в таблицу со строками переменной длины. [...] можно использовать, ОПТИМИЗИРУЮТ ТАБЛИЦУ, чтобы освободить неиспользуемое пространство и дефрагментировать таблицу данных.
И ПРОАНАЛИЗИРУЙТЕ:
ПРОАНАЛИЗИРУЙТЕ TABLE, анализирует и хранит ключевое распределение для таблицы. [...] MySQL использует сохраненное ключевое распределение для решения порядка, в котором к таблицам нужно присоединиться при выполнении соединения на чем-то другом, чем константа. Кроме того, ключевые дистрибутивы могут использоваться при решении который индексы использовать для определенной таблицы в запросе.
ОПТИМИЗИРУЙТЕ хорошо для выполнения, когда у Вас есть свободное время. MySQL оптимизирует хорошо вокруг удаленных строк, но если Вы идете и удаляете 20 ГБ данных из таблицы, это может быть хорошая идея выполнить это. Это определенно не требуется для хорошей производительности в большинстве случаев.
ПРОАНАЛИЗИРУЙТЕ намного более очень важно. Как отмечено, имение необходимых доступных данных таблицы к MySQL (обеспеченный АНАЛИЗИРУЮТ) очень важно когда дело доходит до в значительной степени любого запроса. Это - что-то, что должно быть выполнено на общей основе.
Вопросом № 1 является немного больше приема. Я наблюдал бы сервер очень тщательно, когда это происходит, а именно, диск ввод-вывод. Моя ставка была бы то, что Ваш сервер перегружает или Вашу подкачку или кэши (InnoDB). Или в случае, это может быть запрос, настройка или в связанная загрузка. Неоптимизированные таблицы могли вызвать это. Как упомянуто, выполнение АНАЛИЗИРУЮТ, может очень помочь производительности и вероятно выручит также.
Я не нашел хорошего способа предсказать MySQL "переломные моменты" - и я столкнулся с некоторыми.
Однако я нашел, что переломные моменты связаны с размером таблицы. Но не просто необработанный размер таблицы, скорее насколько большой "сфера интересов" к запросу. Например, в таблице более чем 3 миллионов строк и приблизительно 40 столбцов, приблизительно целых чисел трех четвертей, большинство запросов, которые легко выбрали бы часть их на основе индексов, быстро. Однако, когда одно значение в запросе на одном индексированном столбце означает, что две трети строк теперь "интересны", запрос теперь приблизительно на 5 времен медленнее, чем нормальный. Урок: попытайтесь расположить свои данные, таким образом, такое сканирование не необходимо.
Однако такое поведение теперь дает Вам размер для поиска. Этот размер будет в большой степени иждивенцем на Вашей установке сервера, серверных переменных MySQL и схеме таблицы и данных.
Точно так же я видел запросы создания отчетов, выполненные в разумный срок (~45 секунд), если период составляет две недели, но возьмите полчаса, если период расширяется на четыре недели.
Используйте журнал медленного запроса, который поможет Вам сузить запросы, которые Вы хотите оптимизировать.
Для строго ограниченных во времени запросов это иногда лучше для сохранения стабильности плана при помощи подсказок.
Это кажется, что у Вас есть расстраивающая ситуация и возможно не лучший процесс рассмотрения кода и среда разработки.
Каждый раз, когда Вы добавляете новый запрос к своему коду, необходимо проверить, что он имеет соответствующие готовые индексы, и добавьте тех, которые имеют выпуск кода.
Если Вы не делаете, та Ваша вторая опция состоит в том, чтобы постоянно контролировать журнал медленного запроса и затем идти, бьет разработчиков; я имею в виду, идут, добавляет индекс.
Существует опция позволить регистрироваться запросов, которые не использовали индекс, который будет полезен для Вас.
Если существуют некоторые запросы, который "работает и прекращает работать" (но "используют и индекс"), затем, вероятно, что запрос не был очень хорош во-первых (низкая кардинальность в индексе; неэффективное соединение;...), и первое правило оценки запроса тщательно, когда это добавляется, применялось бы.
Для вопроса № 2 - На InnoDB "анализируют таблицу", в основном свободно работать, поэтому если у Вас есть плохая производительность соединения, не повреждает выполнять его. Если баланс ключей в таблице не изменится много, это вряд ли поможет все же. Это почти всегда сводится к плохим запросам. "оптимизируйте таблицу", восстанавливает таблицу InnoDB; по моему опыту, относительно редко, чтобы это помогло достаточно для ценности стычки наличия таблицы, недоступной в течение какого-то времени (или выполнение основного основного материала обработки отказа, в то время как это работает).