Стратегия контакта с большими таблицами базы данных

Вам не нужно хранить подмножества индивидуально. Все это может быть обработано в цикле while:

myData <- matrix(data = NA,10,3)

while(sum(is.na(myData))>0){ ## while there are NAs
  if (sum(is.na(myData)[,1])>1){ ## if it is not the last row (because the last row will need differetn approach being a vector, and not a matrix)
    myData[is.na(myData)[,1],][ ## from the subset of NAs whose first column (and hence all of it) is not NA
      sample(1:nrow(myData[ ## choose one randomly
        is.na(myData)[,1],] ),size = 1),] = sample(1:100,size = 3,replace = TRUE) ## substitute it by a random vector of the same length
  } else { ## for the last one
    myData[is.na(myData)[,1],]= sample(1:100,size = 3,replace = TRUE) 
  }

}
10
задан arfon 27 November 2008 в 15:58
поделиться

3 ответа

Столбцы раздела в MySQL не ограничены первичными ключами. На самом деле столбец раздела не должен быть ключом вообще (хотя каждый будет создан для него прозрачно). Можно разделить ДИАПАЗОНОМ, ХЕШЕМ, КЛЮЧОМ и СПИСКОМ (который подобен для РАСПОЛОЖЕНИЯ только, что это - ряд дискретных значений). Прочитайте руководство MySQL для обзора типов partioning.

Существуют альтернативные решения, такие как HScale - плагин промежуточного программного обеспечения что прозрачно таблицы разделов на основе определенных критериев. HiveDB является платформой с открытым исходным кодом для горизонтального partioning для MySQL.

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

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

5
ответ дан 4 December 2019 в 02:52
поделиться

Можно обработать это полностью в Активном использовании Записи DataFabric.

Дело не в этом сложный для реализации подобного поведения самостоятельно, если это не подходит. Google sharding для большого обсуждения архитектурного шаблона обработки разделения таблицы в уровне приложений. Это имеет преимущества предотвращения промежуточного программного обеспечения или в зависимости от уличного торговца дб определенные функции. С другой стороны, это - больше кода в Вашем приложении, за которое Вы ответственны.

1
ответ дан 4 December 2019 в 02:52
поделиться

Если Вы хотите разделить свои данные ко времени, следующее решение может соответствовать к Вашей потребности. Можно, вероятно, использовать таблицы MERGE;

Давайте предположим, что Вашу таблицу называют MyTable и что Вам нужна одна таблица в неделю

  1. Ваше приложение всегда входит в систему та же таблица
  2. Еженедельное задание атомарно переименовывает Вашу таблицу и воссоздает пустую: MyTable переименован к MyTable-Year-WeekNumber, и создается новый пустой MyTable
  3. Таблицы слияния отбрасываются и воссоздаются.

Если Вы хотите получить все данные прошлых трех месяцев, Вы составляете таблицу слияния, которая будет включать только таблицы с прошлых 3 месяцев. Составьте столько таблиц слияния, сколько Вам требуются различные периоды. Если Вы не можете включать таблицу, в которую в настоящее время вставляются данные (MyTable в нашем примере), Вы будете еще более счастливыми, поскольку у Вас не будет чтения / параллелизм записи

1
ответ дан 4 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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