最近發現資料庫如果改成自訂義的檔案方式~
由原先前端下條件搜索資料庫的資料,改成搜索檔案的資料~變很快
覺得這應該是ASP.Net才能做得到吧@@..PHP好像不能這麼做?
想問習慣PHP的人~會有這種寫法嗎?
我先說目前環境→補習班→需要匯出每個月課表供學生選課
學生可以在課表上進階搜尋任何條件查詢資料~
以往都是要下SQL條件查詢資料庫後,才把想要的課表資料帶出來~
但因為課表的資料已經累積10年左右了(不可以刪除舊課表資料)
滿龐大的= =...
於是我改了一個做法~就是先匯出最近2個月的課表到文字檔案
文字檔案的內容是存Json格式 [{...},{...},{...},{...}]
如果老師有異動課表資料,就會更新文字檔案的內容~
然後我再把Json檔案的資料讀到網頁的課表顯示
學生若要搜索課表的條件,也可以在這個Json檔案範圍內搜索~
網頁讀取速度滿快的呢@@...
概念作法
DB→Json檔案→網頁顯示
實作方式
Dim Json_LessonUrl As String = "https://........../Lesson.json"
Dim Json_LessonStr As String = func.GetWebTxt(Json_LessonUrl, 65001)
'建立自定義的表格
Dim table As New System.Data.DataTable
table.TableName = "Lesson"
Dim idColumn As System.Data.DataColumn = table.Columns.Add("Lesson_ID", GetType(Integer))
table.Columns.Add("Lesson_Date", GetType(Date))
table.Columns.Add("Lesson_Time", GetType(String))
table.Columns.Add("TeacherName", GetType(String))
table.Columns.Add("Lesson_Title", GetType(String))
table.Columns.Add("Lesson_Notes", GetType(String))
'將資料寫入自訂義表格
Dim JArray_Obj As Newtonsoft.Json.Linq.JArray = Newtonsoft.Json.Linq.JArray.Parse(Json_LessonStr)
For j = 0 To JArray_Obj.Count - 1
Dim Lesson_ID As String = Replace(Newtonsoft.Json.JsonConvert.SerializeObject(JArray_Obj(j).Item("Lesson_ID")), """", "")
Dim Lesson_Date As String = Replace(Newtonsoft.Json.JsonConvert.SerializeObject(JArray_Obj(j).Item("Lesson_Date")), """", "")
Dim Lesson_Time As String = Replace(Newtonsoft.Json.JsonConvert.SerializeObject(JArray_Obj(j).Item("Lesson_Time")), """", "")
Dim TeacherName As String = Replace(Newtonsoft.Json.JsonConvert.SerializeObject(JArray_Obj(j).Item("TeacherName")), """", "")
Dim Lesson_Title As String = Replace(Newtonsoft.Json.JsonConvert.SerializeObject(JArray_Obj(j).Item("Lesson_Title")), """", "")
Dim Lesson_Notes As String = Replace(Newtonsoft.Json.JsonConvert.SerializeObject(JArray_Obj(j).Item("Lesson_Notes")), """", "")
table.Rows.Add(New Object() {Lesson_ID,Lesson_Date,Lesson_Time,TeacherName,Lesson_Title,Lesson_Notes})
Newx
table.AcceptChanges()
'條件搜索
Sql = "1=1 "
If Today_yn > 0 Then
Sql &= " and Lesson_Date = '" & Now.Date & "'"
End If
If Keyword_Date <> "" Then
Sql &= " and Lesson_Date = '" & Keyword_Date & "'"
End If
If Keyword_Teacher <> "" Then
Sql &= " and TeacherName like '%" & Keyword_Teacher & "%'"
End If
If Keyword_Title <> "" Then
Sql &= " and Lesson_Title like '%" & Keyword_Title & "%'"
End If
Dim LessonTable() As System.Data.DataRow = table.Select(Sql)
'最後顯示資料
For k = 0 To LessonTable.Length - 1
Dim Rs As System.Data.DataRow = LessonTable(k)
xxxxxx....略
Next
不考慮把 10 年的課表資料拆成多個 Database 嗎 @@
恩@@~這是好方式~
不過維護上~會比較麻煩吧...
不用分拆全部10年的,你把最近幾個月的弄個cache資料表,如果cache找不到再找全部的就好。
這樣搞不好會比你現在的作法還好,也容易維護。
froce
我倒是想把資料庫跟前端查詢者隔離呢~
也就是我將資料庫停用休息一陣子~
網頁顯示資料也依然正常運作呢@@a
那是你的資料不夠複雜,有些系統join來join去又where來where去再group的,你這樣做會做死。
然後你要這樣乾脆就把近兩個月的json用ajax丟到前端就好,丟給前端去做篩選,也比你在後端跑迴圈浪費伺服器資源好...
算了,你覺得好就好。
我是沒辦法給正解啦,不過我很想給海綿寶寶正解。XD
我還是不覺得這是好解法,如果要這樣做,乾脆將全部的資料都輸出成 JSON 檔。這樣做也不需要後端,直接在 JS 中用 fetch
的方式讀檔就好惹。
PHP好像不能這麼做?
不僅PHP可以這麼做
能拿來寫查詢資料庫網頁的程式語言都能這麼做
想問習慣PHP的人~會有這種寫法嗎?
這寫法跟 ASP.NET/PHP 沒有關係
跟程式設計的人的想法有關係
這大概不是你想聽的答案
你想聽的答案是
改善程式執行效能 維持資料正確性,查詢又變快 這真是一個好做法
選我正解