У меня есть база данных с тремя таблицами:
Lemma LemmaScrittura LemmaSignificato
------------- ----------------- ------------------
|id | | id | | id |
|category. | | writing_1 | | meaning_ITA |
|frequency | | writing_2 | | meaning_EN |
|antonym. | | id_Headword(FK)| | id_Headword(FK)|
------------- ------------------ ------------------
Отношения: 1 Лемма -> Многие LemmaScrittura 1 Лемма -> Многие LemmaSignificato
Я пытаюсь представить эти таблицы вJSON для отправки этой информации в мое приложение для iOS;но у меня проблема с синхронизацией.
API Вот код, который я использую для создания API:
read.php
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
include_once("../objects/lemma.php");
include_once("../objects/lemmaScrittura.php");
include_once("../config/database.php");
$lemmaObj = new Lemma();
$stmt = $lemmaObj->read();
$num = $stmt->num_rows;
$scritturaObj = new LemmaScrittura();
if($num > 0){
$lemmaArr = array();
while($row = mysqli_fetch_array($stmt)){
extract($row);
$lemma=array(
"ambitoUso" => $ambito_Uso,
"catGramm" => $cat_Gramm,
"confrontaCon" => $confrontaCon,
"contrario" => $contrario,
"frequenza" => $frequenza,
"kanjiRef" => $kanji_ref,
"noKanjiLemmaID" => $no_Kanji_Lemma_ID,
"subCatGramm" => $sub_cat_Gramm,
"xRef" => $x_ref
);
array_push($lemmaArr, $lemma);
}
// set response code - 200 OK
http_response_code(200);
// show products data in json format
echo json_encode($lemmaArr);
}else{
// set response code - 404 Not found
http_response_code(404);
// tell the user no products found
echo json_encode(
array("message" => "No headwords found.")
);
}
?>
файл database.php - это файлсоздать соединение с БД.
Чтобы попробовать API, я использую Postman, и когда я вызываю этот API, запрос длится 80-90мс. но если добавить вторую таблицу, то все изменится.
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
include_once("../objects/lemma.php");
include_once("../objects/lemmaScrittura.php");
include_once("../config/database.php");
$lemmaObj = new Lemma();
$stmt = $lemmaObj->read();
$num = $stmt->num_rows;
$scritturaObj = new LemmaScrittura();
if($num > 0){
$lemmaArr = array();
while($row = mysqli_fetch_array($stmt)){
extract($row);
$lemma=array(
"ambitoUso" => $ambito_Uso,
"catGramm" => $cat_Gramm,
"confrontaCon" => $confrontaCon,
"contrario" => $contrario,
"frequenza" => $frequenza,
"kanjiRef" => $kanji_ref,
"noKanjiLemmaID" => $no_Kanji_Lemma_ID,
"subCatGramm" => $sub_cat_Gramm,
"xRef" => $x_ref
);
//Thi is the second Table in which I pass the id of Lemma to get the row of LemmaScrittura that has id_Lemma == ID.
$stmtScrittura = $scritturaObj->read($id);
$scritturaNum = $stmtScrittura->num_rows;
if($scritturaNum > 0){
$scrittureArr = array();
while($rowScritture = mysqli_fetch_array($stmtScrittura)){
extract($rowScritture);
$scrittura = array(
"lemmaKanji" => $lemma_Kanji,
"lemmaKana" => $lemma_Kana,
"lemmaRomaji" => $lemma_Romaji,
"lemmaRomaji_1" => $lemma_Romaji_1,
"lemmaVideo" => $lemma_Video
);
array_push($scrittureArr, $scrittura);
}
$lemma["scrittura"] = $scrittureArr;
}
array_push($lemmaArr, $lemma);
}
// set response code - 200 OK
http_response_code(200);
// show products data in json format
echo json_encode($lemmaArr);
}else{
// set response code - 404 Not found
http_response_code(404);
// tell the user no products found
echo json_encode(
array("message" => "No headwords found.")
);
}
?>
Если я вызову этот API, в котором получим строку второй таблицы, запрос длится 45-50 секунд. очевидно, если я добавлю и третью таблицу, увеличение продолжительности.
Лемма содержит +7300 строк, а LemmaScrittura содержит +7600 строк. Мои вопросы:
1) Это нормально? 2) Как я могу улучшить API, чтобы сделать запрос быстрее? 3) Я в localhost, отличается ли я от реального сервера? Может ли это быть быстрее?
Большое спасибо.
ps Если вам нужна дополнительная информация, спросите.