Я пытаюсь оптимизировать скорость, которую моя локальная база данных заполняет в разрабатываемом веб-приложении. В настоящее время он использует PHP для доступа к базе данных и затем вставляет эти данные в локальную базу данных с помощью Javascript.Оптимизация локальной базы данных WebSQL
Проблема заключается в том, что что-то большее, чем пара записей замедляет ее, и я уверен, что это потому, что она выполняет отдельный SQL-запрос для КАЖДОЙ строки. Я читал транзакции (Commits and Rollbacks, а что нет), и это похоже на ответ, но я не совсем уверен, как его реализовать или даже где.
Ниже приведен пример одной из функций, которые загружают конкретную таблицу.
function ploadcostcodes()
{
$IPAddress = '';
$User = '';
$Password = '';
$Database = '';
$Company = '';
$No='';
$Name='';
ploadSQLConnection($IPAddress,$User,$Password,$Database,$Company);
// Это соединение с фактической базой данных, где эта информация поступает.
$Login = 'XXXXXXX';
$conn=mssql_connect($IPAddress,$Login,$Password);
if (!$conn)
{
die(print_r('Unable to connect to server', true));
}
mssql_select_db($Database, $conn);
$indent=" ";
$sql="SELECT Cost_Code_No as No, Description as Name, Unit_of_Measure FROM v_md_allowed_user_cost_codes WHERE Company_No = " . $Company . " and User_No = '" . $User . "'";
$rs=mssql_query($sql);
if (!$rs)
{
exit("No Data Found");
}
while ($row = mssql_fetch_array($rs))
{
$No = addslashes($row['No']);
$Name = addslashes($row['Name']);
$Name = str_replace("'",'`',$Name);
$Unit = addslashes($row['Unit_of_Measure']);
//THIS IS WHERE I SEE THE PROBLEM
echo $indent."exeSQL(\"INSERT INTO Cost_Codes (Cost_Code_No,Name,Unit_of_Measure) VALUES('".$No."','".$Name."','".$Unit."')\",\"Loading Cost Codes...\"); \r\n";
}
mssql_free_result($rs);
mssql_close($conn);
return 0;
}
Я не знаю, что нужно для транзакции (или даже если это то, что нужно сделать). Существует MSSQL для доступа к данным, SQLite для вставки его и Javascript, который запускает PHP-код.
Я не понимаю, использование подчеркивания в строке 3. –
@Pedro: это часть [underscore.js] (http://documentcloud.github.com/underscore/), '_ (массив) .each' работает так же, как 'forEach', выполняет заданную функцию для каждого элемента в' array'. – DCoder
Что делать, если одна из вставок не работает, как управлять транзакциями. Поскольку каждый executeSQL является асинхронным, он может вставить другой SQL перед сбоем. Есть ли способ обойти это. – VikrantY