Как реализовать фоновую запись / асинхронную запись - позади кэширования в PHP?

Если я понял ваш вопрос, вы можете попробовать этот код:

я использовал setter и getter; document.forms. Для получения дополнительной информации вы можете прочитать:

w3schools: setter and getter

w3schools: формы проверки

другая ссылка, где вы Можно попробовать другую информацию: https://developer.mozilla.org/

JS

//object userInput
var userInput = {
  num:"",
  clien:"",
  direc:"",
  nife:"",
  nifd:"",
  div:"",
  sub:"",
  iva:"",
  //method set
  set setNum(num){
    this.num=num;
  },
  set setClien(clien){
    this.clien=clien;
  },
  set setDirec(direc){
    this.direc=direc;
  },
  set setNife(nife){
    this.nife=nife;
  },
  set setNifd(nifd){
    this.nifd=nifd;
  },
  set setDiv(div){
    this.div=div;
  },
  set setSub(sub){
    this.sub=sub;
  },
  set setIva(iva){
    this.iva=iva;
  },
  //method get
  get getNum(){
   return this.num;
  },
  get getClien(){
   return this.clien;
  },
  get getDirec(){
   return this.direc;
  },
  get getNife(){
   return this.nife;
  },
  get getNifd(){
   return this.nifd;
  },
  get getDiv(){
   return this.div;
  },
  get getSub(){
   return this.sub;
  },
  get getIva(){
   return this.iva;
  }
};

function myFunction2(){
  const myForm=document.forms["formu"];//form

 //put into object UserInput the user value
  userInput.setNum=myForm["num"].value;
  userInput.setClien=myForm["clien"].value;
  userInput.setDirec=myForm["direc"].value;
  //and so on...

  //print the value present in userInput object
  console.log(userInput.getNum);
  console.log(userInput.getClien);
  console.log(userInput.getDirec);

  return false;
}

HTML [1119 ]





  
num:

clien:

direc:

NIFe:

NIFd:

div:

sub:

iva:

Фрагмент кода




  
  
  
  
   Form
  


  
num:

clien:

direc:

NIFe:

NIFd:

div:

sub:

iva:

Надеюсь, это поможет

]

5
задан cletus 29 November 2008 в 21:03
поделиться

7 ответов

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

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

Вы действительно хотите смочь воспроизвести это на своем поле разработки производственной спецификации и проанализировать точно, почему это происходит. Не должно быть трудно остановиться.

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

НО не пытайтесь искать способ усложнить Ваше приложение, когда будет способ легкого превращения его вместо этого, сохраняя текущий алгоритм.

2
ответ дан 14 December 2019 в 01:20
поделиться

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

0
ответ дан 14 December 2019 в 01:20
поделиться

Можно обновить локальный кэш (надо надеяться, memcached) и затем продвинуть запросы записи через beanstalkd.

1
ответ дан 14 December 2019 в 01:20
поделиться

Как Вы делаете вставки, Вы делаете, каждый вставляет на запись

mysql_query('INSERT INTO tableName VALUES(...)');
mysql_query('INSERT INTO tableName VALUES(...)');
mysql_query('INSERT INTO tableName VALUES(...)');
mysql_query('INSERT INTO tableName VALUES(...)');
mysql_query('INSERT INTO tableName VALUES(...)');

или Вы используете единый запрос

mysql_query('INSERT INTO tableName VALUES(...),(...),(...),(...)');

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

0
ответ дан 14 December 2019 в 01:20
поделиться

Еще одно решение, которое Вы могли использовать (вместо того, чтобы настроить mysql :)) состоит в том, чтобы использовать некоторый сервер JMS и ЗАТОПТАТЬ драйвер соединения для PHP для данных записи к серверу базы данных асинхронным способом. ActiveMQ имеют встроенную поддержку, ТОПЧУТ протокол. И существует проект StompConnect, который является, ТОПЧУТ прокси для любого совместимого сервера JMS (OpenMQ, JBossMQ и т.д.).

2
ответ дан 14 December 2019 в 01:20
поделиться

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

Другая вещь состоит в том, что я думаю, что Вы используете MYISAM (механизм таблицы), который блокирует всю таблицу на UPDATE.I, предлагают, чтобы Вы использовали INNODB вместо этого. INNODB медленнее включенный SELECT- запросы, но быстрее на INSERT и UPDATE потому что это только блокирует строку, это продолжает работать а не вся таблица.

1
ответ дан 14 December 2019 в 01:20
поделиться

mysql_query ('INSERT INTO tableName VALUES (...), (...), (...), ( ...) ')

Приведенная выше инструкция запроса лучше. Но у нас есть другое решение для повышения производительности оператора вставки.
Выполните следующие действия ..
1. Вы просто создаете CSV (файл с разделителями-запятыми) или простой текстовый файл и записываете все данные, которые хотите вставить, используя механизм записи файлов (например, класс FileOutputStream в Java).
2. используйте эту команду

LOAD DATA INFILE 'data.txt' INTO TABLE table2
  FIELDS TERMINATED BY '\t';

3, если вы не совсем понимаете эту команду, затем перейдите по ссылке

2
ответ дан 14 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

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