๐ PHP ๋ ๊ฑฐ์ ์ฝ๋ ๋ฆฌํฉํ ๋ง - 300๋ฐฐ ์ฑ๋ฅ ๊ฐ์ ์ฌ๋ก
ยท 5 min read
๐ ๊ฐ์โ
๋ ๊ฑฐ์ PHP ์์คํ ์ ์ฑ๋ฅ ๊ฐ์ ์ฌ๋ก๋ฅผ ๊ณต์ ํฉ๋๋ค. 300๋ถ์ด ๊ฑธ๋ฆฌ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์ 5์ด๋ก ๋จ์ถํ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ ์ค๋ช ํฉ๋๋ค.
๐ ๋ฌธ์ ์ํฉโ
โ ๊ธฐ์กด ์์คํ ์ ๋ฌธ์ ์ โ
- 300๋ช ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฝ 300๋ถ ์์ (1์ธ๋น 1๋ถ)
- ์ด์ํ์ ์ ๋ฌด ํจ์จ์ฑ ์ ํ
- ๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํ ์๋ก ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฒ๋ฆฌ ์๊ฐ ์ฆ๊ฐ
๐ค ์ฑ๋ฅ ์ ํ์ ์ฃผ์ ์์ธโ
-
๋นํจ์จ์ ์ธ ๋ฐ์ดํฐ ์กฐํ ๋ฐฉ์
// ๊ธฐ์กด: ๋จ๊ฑด ์กฐํ ๋ฐ๋ณต
for($i = 0; $i < count($list); $i++) {
$sql = "SELECT id, member_info FROM ๊ณ ๊ฐํ ์ด๋ธ WHERE id = '$user_id'";
// ๋งค ๋ฐ๋ณต๋ง๋ค DB ์กฐํ ๋ฐ์
// ๊ณ ๊ฐ์ด ์ ๊ณผ ๋์ด ์๋ ๋ฐ์ดํฐ ์กฐํ 1
// for๋ฌธ ์์์ ๊ณ ๊ฐ ์ ๋ณด๊ฐ ์๋ ๋๋ค๋ฅธ ๋ฐ์ดํฐ ์กฐํ
// ๊ณ ๊ฐ ์ ๋ณด๊ฐ ์๋ ๋๋ค๋ฅธ ๋ฐ์ดํฐ ์กฐํ
// ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์กฐํ๊ฐ ๋ฐ๋ณต๋์ด ์ฑ๋ฅ ์ ํ
} -
ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฏธํก
- ๊ฑด๋ณ ์ฒ๋ฆฌ ๋ฐ ์ปค๋ฐ์ผ๋ก ์ธํ ์ค๋ฒํค๋
- ๋ถ๋ถ ์คํจ ์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์
โก ๊ฐ์ ๋ฐฉ์โ
1. ๐พ ๋ฐ์ดํฐ ์กฐํ ์ต์ ํโ
// ๊ฐ์ : IN ์ ์ ํ์ฉํ ์ผ๊ด ์กฐํ
$user_ids = array_column($list, 'user_id');
$sql = "SELECT * FROM ๊ณ ๊ฐํ
์ด๋ธ WHERE id IN (" . implode(',', $user_ids) . ")";
$result = sql_query($sql);
// ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ๊ตฌํ
$user_map = [];
while($row = sql_fetch_array($result)) {
$user_map[$row['id']] = $row; // ์ฌ์ฉ์ ID๋ฅผ ํค๋ก ํ๋ ์ฐ๊ด ๋ฐฐ์ด ์์ฑ
}
// ์บ์๋ ๋ฐ์ดํฐ ํ์ฉ ์์
foreach($list as $item) {
$user_id = $item['user_id'];
if (isset($user_map[$user_id])) {
$user_info = $user_map[$user_id]; // DB ์กฐํ ์์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ฆ์ ์กฐํ
// ์ถ๊ฐ ์ฒ๋ฆฌ ๋ก์ง...
}
}
๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ํจ๊ณผโ
- ๐ DB ์กฐํ ํ์: 300ํ โ 1ํ๋ก ๊ฐ์
- ๐ก ์กฐํ ์๋: O(n) โ O(1) ๋ณต์ก๋๋ก ๊ฐ์
- ๐ ๋ฐ์ดํฐ ์ฌ์ฌ์ฉ: ๋์ผ ๋ฐ์ดํฐ ๋ฐ๋ณต ์กฐํ ์ ๊ฑฐ
2. ๐ฆ Bulk Insert ๊ตฌํโ
function bulk_insert($tableName, $columns, $values) {
$sql = "INSERT INTO {$tableName} (" . implode(',', $columns) . ") VALUES ";
$valueStrings = [];
foreach($values as $row) {
$valueStrings[] = "(" . implode(',', array_map('sql_escape', $row)) . ")";
}
$sql .= implode(',', $valueStrings);
return sql_query($sql);
}
3. ๐ ํธ๋์ญ์ ์ฒ๋ฆฌ ๊ฐ์ โ
sql_begin_transaction();
try {
// ๋ฐ์ดํฐ ๊ฒ์ฆ
$validated_data = processValidate($input_data);
// Bulk Insert ์คํ
bulk_insert('score_table', $columns, $validated_data);
bulk_insert('history_table', $columns, $validated_data);
sql_commit();
} catch (Exception $e) {
sql_rollback();
log_error($e->getMessage());
return ['success' => false, 'message' => '์ฒ๋ฆฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.'];
}
๐ ๊ฐ์ ๊ฒฐ๊ณผโ
| ๊ตฌ๋ถ | ์ฒ๋ฆฌ ์๊ฐ | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ | DB ๋ถํ |
|---|---|---|---|
| ๊ฐ์ ์ | 300๋ถ | ๋์ | ๋์ |
| ๊ฐ์ ํ | 5์ด | ์ต์ ํ | ๋ฎ์ |
โจ ์ฃผ์ ๊ฐ์ ํฌ์ธํธโ
-
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ์ถ ์ต์ํ
- 300 * 10ํ โ 10ํ๋ก ๊ฐ์
- ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ํ์ฉ
-
โก ์ผ๊ด ์ฒ๋ฆฌ ๋์
- Bulk Insert๋ก Insert ์ฟผ๋ฆฌ ์ต์ํ
- ํธ๋์ญ์ ๋จ์ ์ต์ ํ
-
๐ ์ฝ๋ ํ์ง ํฅ์
- ๋ชจ๋ํ ๋ฐ ํจ์ ๋ถ๋ฆฌ
- ์๋ฌ ์ฒ๋ฆฌ ๊ฐํ
- ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ก์ง ์ฒด๊ณํ
๐ซ ๋ง์น๋ฉฐโ
์ด๋ฒ ๋ฆฌํฉํ ๋ง์ ํตํด ์ป์ ๊ตํ:
- ๐ฏ ๋ ๊ฑฐ์ ์ฝ๋๋ ์ ์ ํ ๋ฆฌํฉํ ๋ง์ผ๋ก ํฐ ์ฑ๋ฅ ๊ฐ์ ์ด ๊ฐ๋ฅ
- ๐ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ต์ ํ์ ์ค์์ฑ
- ๐๏ธ ์ฒด๊ณ์ ์ธ ์ฝ๋ ๊ตฌ์กฐ์ ํ์์ฑ
์์ผ๋ก๋ ์ง์์ ์ธ ์ฝ๋ ๊ฐ์ ๊ณผ ํ์ต์ ํตํด ๋ ๋์ ์์คํ ์ ๋ง๋ค์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค.
Legacy..Legacy..Legacy.. ๋ด๊ฐ ๋ง๋ค๋ ์ง์ง ์ด๋ฐ ๋ฌธ์ ๊ฐ ์์๊ธฐ๋๋ก ๋ ธ๋ ฅํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
๐ก ์ฐธ๊ณ
์ค์ ํ๋ก๋์ ํ๊ฒฝ์์ ๊ฒ์ฆ๋ ์ฌ๋ก์ ๋๋ค. ์ ์ฌํ ์ฑ๋ฅ ์ด์๊ฐ ์๋ค๋ฉด ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํด๋ณด์ธ์.
