這篇文章主要是關於使用 JMP 的 SQL 功能,但也涉及 XML、Linux、MythTV。
SQL 查詢生成器文檔: https://www.jmp.com/support/help/14/query-builder.shtml#
神話電視https://www.mythtv.org/是一個開源程序 (TANSTAAFL),可以使用 PC 中的調諧卡(以及其他一些東西)錄製無線電視廣播。 這是了解 Linux 和 MySQL/MariaDB 並避免看電視的好方法。 該實現使用兩台計算機,一台(或多台)後端進行錄製,一台(或多台)前端進行觀看。 SQL 數據庫跟踪要記錄的內容和已記錄的內容。
https://code.mythtv.org/trac/ticket/12974#no1描述了為什麼在 MythTV 後端磁盤上有很多非常舊、非常大的文件在 MythTV 前端不可見的原因。 它說在 deletepending 數據庫字段周圍有一個 MythTV 錯誤,如果 MythTV 在設置字段和刪除文件之間崩潰,該錯誤會阻止文件被刪除。
例如,使用 Linux ls命令列出一些文件,這裡有一個 3GB 的例子(現在是 2019 年 12 月;3T 磁盤只能容納大約兩週的文件;這些文件應該早就沒有了。)
-rw-r--r-- 1 神話電視 神話電視3.1G 2018 年 3 月 21 日1051_20180321073000.ts
或者,在導入數據庫後,
JMP data table imported from database showing old, large files從數據庫導入的 JMP 數據表顯示舊的大文件
數據庫導入似乎很有用;它將具有相關值的列(或字段)並排放置,並組合來自數據庫中多個表的信息。 以下是執行此操作的步驟。
找到數據庫憑據。
在運行 MythTV 前端的 Linux 系統上,將有一個文件 ~/.mythtv/config.xml 。
<CONFIGURATION>
<LOCALHOSTNAME>my-unique-identifier-goes-here</LOCALHOSTNAME>
<DATABASE>
<PINGHOST>1</PINGHOST>
<HOST>closet.local</HOST>
<USERNAME>mythtv</USERNAME>
<PASSWORD>this is the pw</PASSWORD>
<DATABASENAME>mythconverg</DATABASENAME>
<PORT>3306</PORT>
</DATABASE>
<WAKEONLAN>
<ENABLED>0</ENABLED>
<SQLRECONNECTWAITTIME>0</SQLRECONNECTWAITTIME>
<SQLCONNECTRETRY>5</SQLCONNECTRETRY>
<COMMAND>echo 'WOLsqlServerCommand not set'</COMMAND>
</WAKEONLAN>
<UPNP>
<UDN>
<MEDIARENDERER>52d20477-fda1-4e42-9edd-5992bd0ca45f</MEDIARENDERER>
</UDN>
</UPNP>
</CONFIGURATION>
將文件複製到您的 JMP 副本可以讀取的位置,然後使用 JMP 15 像這樣打開它:
// grab user name and password from the XML config file
dtConfig = Open( "F:\mythconfig.xml", invisible, XML Wizard( 0, guess( "huge" ) ) );
這將創建一個像這樣的隱藏表
JMP data table loaded from XML file with one row and columns for UserName, Password, and DatabaseName從 XML 文件加載的 JMP 數據表,其中一行一列用於用戶名、密碼和數據庫名稱
Closet.local 是後端主機的名稱,mythtv 是可以訪問 mythconverg 數據庫的 SQL 用戶名,3306 是默認端口,因此不需要。
使用 windows ODBC 數據源管理器創建 DSN。
您可能需要 64 位驅動程序,並且可能需要下載它們。 https://dev.mysql.com/downloads/connector/odbc/或者可能https://downloads.mariadb.org/connector-odbc/+releases/ . 我很確定我實際上是在我的後端服務器上運行 MariaDB,並在前端使用 MySQL 連接器。 https://www.google.com/search?q=mysql+vs+mariadb
The Windows ODBC Data Source Administrator sets up a DSNWindows ODBC 數據源管理員設置 DSN
按配置並添加幾個字段;我認為這些都可以在以後通過連接字符串覆蓋。 我的 VirtualBox、網絡和服務器對服務器名稱 closet.local 不滿意,因此使用了點分 IP。 您可以填寫用戶和密碼並測試連接並查看可用的數據庫名稱。 下面的 JSL 將覆蓋那些。
The ODBC Connector dialog supplies some information that can be overridden laterODBC 連接器對話框提供了一些稍後可以覆蓋的信息
發現 MythTV 數據庫中的表名
多虧了一個例子@briancorcoran為下一段 JSL 指明方向。
https://community.jmp.com/t5/Discussions/How-do-I-get-the-list-of-the-databases-available-on-a-designated/mp/10589
// DSN=Mythtv comes from the windows ODBC Data Source Administrator applet
dt = Open Database(
"DSN=Mythtv;UID=" || dtConfig:UserName[1] || ";PWD=" || dtConfig:Password[1],
"SHOW tables from " || dtConfig:DatabaseName[1] || ";",
"tables in " || dtConfig:DatabaseName[1]
);
該 JSL 使用從上面的 XML 配置文件打開的 dtConfig JMP 數據表來獲取實際密碼和其他信息以覆蓋 DSN(也稱為 mythtv,與用戶名無關。)Brian 的示例使用了 SHOW DATABASES。 此 JSL 使用 SHOW TABLES FROM mythconverg 從名為 mythconverg 的 mythtv 數據庫中獲取 80 多個表。
(SQL可以有多個數據庫,一個數據庫可以有多個表。 數據庫彼此不交互,但數據庫中的表通常具有允許連接兩個表的公共鍵。 因此,寵物數據庫、食譜數據庫和 MythTV 數據庫。 在 MythTV 數據庫中,描述要錄製哪些節目的表格和描述已錄製哪些節目的表格以及許多其他表格......)
A JMP data table from Open Database(...) showing the 88 table names in the database來自 Open Database(...) 的 JMP 數據表顯示了數據庫中的 88 個表名
開始弄清楚數據庫的形狀
如果你做錯了並寫入數據庫,你將破壞數據庫。 你可以去閱讀源代碼對於 MythTV,甚至可以找到解釋表格工作原理的文檔,或者您可以問一個令人興奮的問題:明天我還能看錄製的電視嗎? 接下來是令人興奮的方式。
翻翻上面數據表中數據庫的表名,看看有沒有有意思的。 有,但尚不清楚它們代表什麼。
two of the high lighted table names, record and recorded, look promising兩個高亮的表名,record 和 recorded,看起來很有前途
這是查看表及其列和一些數據的簡單方法。
文件→數據庫→OpenTable
The OpenTable dialog opens one database table into a JMP data tableOpenTable 對話框將一個數據庫表打開到 JMP 數據表中
這張表有50列,但是跳出來的是描述:
The record table seems to describe what to record記錄表似乎描述了要記錄什麼
這是對要記錄的內容的描述(或者可能是不記錄的內容……我寫了那個規則。)這不是我需要的表格。
名為 recorded 的表呢?
The recorded table seems to be a list of programs that were recorded錄製的表格似乎是錄製的節目列表
這看起來像一張錄製節目表。 這將是一個起點。
加入一些表格以在一個地方獲得所需的一切
File→Database→Query Builder,選擇記錄的表...
Query Builder starts by choosing a single table查詢生成器首先選擇一個表
當你按下 NEXT 時,你會得到這個驚人的@埃里克希爾中間窗口:
The amazing Select Tables windows can view other tables and join them to the first table驚人的選擇表窗口可以查看其他表並將它們加入第一個表
此窗口用於瀏覽表格。 暫時不要單擊 Build Query,這會將您帶到一個窗口,您可以在其中選擇列。 在此之前,使用此窗口加入其他表格。
(您可以稍後返回此窗口,但您應該能夠在以後第一次訪問時找到您需要的一切……也許吧。)
Clicking a table shows a snapshot單擊表格顯示快照
這是我最終使用的(幾乎,請參見下面的另一項更改):
Three more tables joined with the first與第一個相連的另外三個表
我使用 recordedfile(上面選擇的)來獲取數據庫記住的文件大小。 我認為這個數據庫沒有規範化,因為 basename 出現在 recorded 和 recordedfile 中...... https://en.wikipedia.org/wiki/Database_normalization
(底部的按鈕不同,因為我在構建查詢中使用了返回選擇更多表的紅色三角形按鈕來獲取這張圖片……按確定將返回到構建查詢窗口。)
這裡有很多功能:您可以使用藍色圓圈按鈕控制連接,可以看到列中任何表的快照,還可以預覽連接結果。 並且列出了所有表格! 這就是解決難題的地方:需要什麼表以及它們如何連接在一起。 選擇 Table Snapshot 選項卡,在左列中選擇一個表,然後使用向下箭頭查看每個表。 很多 MythTV 的桌子都是空的,這意味著我可以忽略它們。
選擇要保留的列
是時候單擊 Build Query 按鈕了。 此窗口允許您選擇所需的列並嘗試查詢:
Build Query window chooses columns to keep in the JMP data table構建查詢窗口選擇要保留在 JMP 數據表中的列
雙 X 按鈕刪除所有列選擇;您可能想單擊單個 X 以僅刪除選定的列。 上下移動描述列的行以對列進行排序,並選擇一個列以對數據進行預排序。
選擇運行查詢,研究表格,重新思考……
從上面的對話框中,Tables 旁邊的紅色三角形會將您帶回到添加另一個表對話框(令人驚嘆的對話框)。 我需要另一張桌子來真正了解發生了什麼。
Added another table, recgroup添加了另一個表,recgroup
recgroups 表有 Deleted Group 指示器。 這是一些結果(類似於頂部的原始表)。所有這些基本名稱都在默認組中,而不是已刪除的組中。
The filesize column suggests there is a lot of space I might recover文件大小列表明我可能會恢復很多空間
失去了那麼多空間!
這是來自表中源腳本的 JSL/SQL。 將 <<
New SQL Query(
Connection( "ODBC:DSN=mythtv;SERVER=192.168.0.39;UID=mythtv;DATABASE=mythconverg;PORT=3306;PWD=%_PWD_%;"
),
QueryName( "recorded" ),
Select(
Column( "callsign", "t3" ),
Column( "channum", "t3" ),
Column( "starttime", "t1", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) ),
Column( "endtime", "t1", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) ),
Column( "title", "t1" ),
Column( "description", "t1" ),
Column( "autoexpire", "t1" ),
Column( "preserve", "t1" ),
Column( "deletepending", "t1" ),
Column( "recgroup", "t4" ),
Column( "basename", "t2" ),
Column( "filesize", "t2" ),
Column( "width", "t2" ),
Column( "height", "t2" ),
Column( "fps", "t2" ),
Column( "videoprop", "t5" ),
Column( "subtitletypes", "t5" )
),
From(
Table( "recorded", Alias( "t1" ) ),
Table( "recgroups", Alias( "t4" ),
Join( Type( Left Outer ),
EQ( Column( "recgroupid", "t1" ), Column( "recgroupid", "t4" ) )
)
),
Table( "recordedprogram", Alias( "t5" ),
Join(
Type( Left Outer ),
EQ( Column( "chanid", "t1" ), Column( "chanid", "t5" ) ) &
EQ(
Column("starttime","t1",Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) ),
Column("starttime","t5",Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) )
)
)
),
Table( "recordedfile", Alias( "t2" ),
Join( Type( Left Outer ),
EQ( Column( "recordedid", "t1" ), Column( "recordedid", "t2" ) )
)
),
Table( "channel", Alias( "t3" ),
Join( Type( Left Outer ),
EQ( Column( "chanid", "t1" ), Column( "chanid", "t3" ) )
)
)
),
Order By( Column( "starttime", "t1", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ),
Order( "Ascending" ) )
)
) << Run;
所以我需要做一個小測試:對於單個卡住的文件,觸摸數據庫以重新打開 autoexpire 並關閉 deletepending。 也許停止並重新啟動後端。 然後觀察文件是否被刪除,在接下來的幾個小時或幾天內的某個時間……MythTV 的那部分行為,即時刪除,也令人困惑。
H嗯。 最好慢慢來。 總文件大小在數據庫中是兩倍大磁盤。讓我們刪除這個:1171_20180321043700.ts
首先,進行查詢以找到它,使用過濾器。 我之所以選擇這條路線,是因為 JMP 可以在 GUI 中為我完成大部分工作,而且如果沒有一些幫助,我不太願意編寫 SQL。 在 JMP 為我完成困難部分後,我將修改 SQL。
Add a filter to select a single basename (file)添加過濾器以選擇單個基本名稱(文件)
好的! 過濾器將 WHERE 子句添加到 SQL 中,並且恰好找到了一行。 我認為是時候從查詢生成器對話;需要添加 mythconverg。在每個表名之前:
// grab user name and password from the XML config file
dtConfig = Open( "F:\mythconfig.xml", invisible, XML Wizard( 0, guess( "huge" ) ) );
//https://community.jmp.com/t5/Discussions/How-do-I-get-the-list-of-the-databases-available-on-a-designated/m-p/10589
// dtConfig:UserName,Password,DatabaseName
//
// DSN=Mythtv comes from the windows ODBC Data Source Administrator applet
dbc=CreateDatabaseConnection("DSN=Mythtv;UID=" || dtConfig:UserName[1] || ";PWD=" || dtConfig:Password[1]);
rc=executesql(dbc,"\[
SELECT t3.callsign, t3.channum, t1.starttime, t1.endtime,
t1.title, t1.description, t1.autoexpire, t1.preserve,
t1.deletepending, t4.recgroup, t2.basename, t2.filesize,
t2.width, t2.height, t2.fps, t5.videoprop,
t5.subtitletypes
FROM mythconverg.recorded t1
LEFT OUTER JOIN mythconverg.recgroups t4
ON ( t1.recgroupid = t4.recgroupid )
LEFT OUTER JOIN mythconverg.recordedprogram t5
ON ( ( t1.chanid = t5.chanid ) AND ( t1.starttime = t5.starttime ) )
LEFT OUTER JOIN mythconverg.recordedfile t2
ON ( t1.recordedid = t2.recordedid )
LEFT OUTER JOIN mythconverg.channel t3
ON ( t1.chanid = t3.chanid )
WHERE ( ( ( t2.basename="1171_20180321043700.ts" ) ) )
ORDER BY t1.starttime ASC;
]\","one row");
Close Database Connection(dbc);
close(dtConfig,nosave);
show(nrows(rc)==1); // better only be one row
警告,危險代碼如下,您可能會使用更新和設置清除您的數據庫。
並替換 SELECT...從和更新並添加一個 SET 子句並刪除 ORDER BY:
// grab user name and password from the XML config file
dtConfig = Open( "F:\mythconfig.xml", invisible, XML Wizard( 0, guess( "huge" ) ) );
dbc=CreateDatabaseConnection("DSN=Mythtv;UID=" || dtConfig:UserName[1] || ";PWD=" || dtConfig:Password[1]);
rc=executesql(dbc,"\[
UPDATE mythconverg.recorded t1
LEFT OUTER JOIN mythconverg.recgroups t4
ON ( t1.recgroupid = t4.recgroupid )
LEFT OUTER JOIN mythconverg.recordedprogram t5
ON ( ( t1.chanid = t5.chanid ) AND ( t1.starttime = t5.starttime ) )
LEFT OUTER JOIN mythconverg.recordedfile t2
ON ( t1.recordedid = t2.recordedid )
LEFT OUTER JOIN mythconverg.channel t3
ON ( t1.chanid = t3.chanid )
SET t1.autoexpire=1, t1.deletepending=0
WHERE ( ( ( t2.basename="1171_20180321043700.ts" ) ) );
]\","update");
Close Database Connection(dbc);
close(dtConfig,nosave);
再次獲取表格顯示更新:
The UPDATE and SET workedUPDATE 和 SET 有效
我不確定如何獲取更新狀態; rc 是一個缺失值,沒有創建表,這是有道理的。 但它奏效了……
幾分鐘後,該文件仍然存在。 我要重新啟動後端。 重新啟動。 該文件現在確實顯示在前端。
Part of the frontend GUI shows the ancient file is visible again部分前端 GUI 顯示舊文件再次可見
我會坐下來看看它是否會在幾天后從磁盤上消失。 然後我將像這樣處理其餘的,看看為什麼數據庫似乎認為 3T 磁盤上有 6T...
幾個小時之後: ls: 無法訪問 '1171_20180321043700.ts': 沒有那個文件或目錄
如上所述(規範化註釋),文件名出現在多個表中。 我將 6T 清理為更現實的 3T 的計劃假設記錄表中有條目引用不再在磁盤上的文件。 與其嘗試從兩個(也許更多?)表中刪除記錄,我想我會創建一個虛擬文件(如果沒有)並讓現有代碼以通常的方式處理它。 也許一個好的第一步是將 recorded 和 recordedfile 數據庫表同時打開到 JMP 數據表中,並確定磁盤上丟失文件和表之間不一致的位置。
文件→數據庫→OpenTable 就可以了。 刪除除 basename 和 recordedid 之外的所有列,按 recordedid 排序,比較數據表。 單擊三個差異。 簡單的。
好奇:1171_20180317233200.ts 在記錄中,但不是記錄文件
並作為 0 字節文件存在-rw-rw-r-- 1 mythtv mythtv 0 2018 年 4 月 4 日 1171_20180317233200.ts
並且 recordedfile 中有兩個名稱全為空的條目,在 recorded 中沒有匹配的 recordedid。 可能不想清理它們,不知道其他表可能引用它們。
上面刪除的文件, 1171_20180321043700.ts , 沒有出現在任何一個表中。 耶!
我將使用 recorded as truth 因為它沒有空白記錄。 我將使用帶有 fileexists() 函數的列公式來幫助查看發生了什麼。
Graph; points at top represent real files on disk, points at bottom are files that are not on disk圖形;頂部的點代表磁盤上的真實文件,底部的點是不在磁盤上的文件
有可能我會收回大量磁盤空間,但我想刪除的集群中可能有很多長度為零或接近零的文件。 休息時間,不應該在晚上 9 點開始。
回答“多少錢?”問題,使用 filesize() 而不是 fileexists()。 許多文件存在,但都是零字節,因此只有大約 0.3T(10%!)的可恢復空間。
第 1 階段:為不存在的文件添加虛擬文件,以便 MythTV 稍後可以清理它們。 當 MythTV 找不到文件時,記錄保留在數據庫中的原因是因為 MythTV 假設文件可能位於不可用的磁盤上,如果刪除數據庫條目,它們將成為孤立的。
// actualsize is this formula:
// File Size( "f:/closet/" || :basename )
For Each Row(
If( :basename != "" & Is Missing( actualsize ),
If( !File Exists( "f:/closet/" || :basename ),
Show( :basename );
Save Text File( "f:/closet/" || :basename, "hi there" );// use “touch” on Linux
, // else
Throw( "oops" )
)
)
);
Write( "\!ndone" );
階段 2:將數據庫的新副本提取到數據表中。 看上去不錯。 是時候重新處理 SQL 了,看看我們是否可以只選擇要更新的記錄:
// grab user name and password from the XML config file
dtConfig = Open( "F:\mythconfig.xml", invisible, XML Wizard( 0, guess( "huge" ) ) );
dbc=CreateDatabaseConnection("DSN=Mythtv;UID=" || dtConfig:UserName[1] || ";PWD=" || dtConfig:Password[1]);
rc=executesql(dbc,"\[
SELECT t3.callsign, t3.channum, t1.starttime, t1.endtime,
t1.title, t1.description, t1.autoexpire, t1.preserve,
t1.deletepending, t4.recgroup, t2.basename, t2.filesize,
t2.width, t2.height, t2.fps, t5.videoprop,
t5.subtitletypes
FROM mythconverg.recorded t1
LEFT OUTER JOIN mythconverg.recgroups t4
ON ( t1.recgroupid = t4.recgroupid )
LEFT OUTER JOIN mythconverg.recordedprogram t5
ON ( ( t1.chanid = t5.chanid ) AND ( t1.starttime = t5.starttime ) )
LEFT OUTER JOIN mythconverg.recordedfile t2
ON ( t1.recordedid = t2.recordedid )
LEFT OUTER JOIN mythconverg.channel t3
ON ( t1.chanid = t3.chanid )
WHERE ( ( ( t1.deletepending=1 ) ) )
ORDER BY t1.starttime ASC;
]\","one row");
Close Database Connection(dbc);
close(dtConfig,nosave);
show(nrows(rc)==1);
這會選擇大約一半的記錄,這些記錄都非常舊,並且掛在 deletepending 上。 是時候變得大膽了……
第三階段:做。
警告,危險代碼如下,您可能會使用更新和設置清除您的數據庫。
// grab user name and password from the XML config file
dtConfig = Open( "F:\mythconfig.xml", invisible, XML Wizard( 0, guess( "huge" ) ) );
dbc=CreateDatabaseConnection("DSN=Mythtv;UID=" || dtConfig:UserName[1] || ";PWD=" || dtConfig:Password[1]);
rc=executesql(dbc,"\[
UPDATE mythconverg.recorded t1
LEFT OUTER JOIN mythconverg.recgroups t4
ON ( t1.recgroupid = t4.recgroupid )
LEFT OUTER JOIN mythconverg.recordedprogram t5
ON ( ( t1.chanid = t5.chanid ) AND ( t1.starttime = t5.starttime ) )
LEFT OUTER JOIN mythconverg.recordedfile t2
ON ( t1.recordedid = t2.recordedid )
LEFT OUTER JOIN mythconverg.channel t3
ON ( t1.chanid = t3.chanid )
SET t1.autoexpire=1, t1.deletepending=0
WHERE ( ( ( t1.deletepending=1 ) ) );
]\","update");
Close Database Connection(dbc);
close(dtConfig,nosave);
deletependings 不再掛起,自動過期又回來了。 時間拭目以待。
第二天早上:我認為它起作用了;應該做更好的筆記。 這是在錄製早間新聞節目(星期一早上 6:50)之前仍然存在的最舊文件:
-rw-r--r-- 1 mythtv mythtv 1.9G 2018 年 3 月 22 日 1111_20180322080000.ts
-rw-r--r-- 1 mythtv mythtv 3.2G 2018 年 3 月 22 日 1051_20180322080000.ts
-rw-rw-rw- 1 mythtv mythtv 1.1M 2018 年 3 月 22 日 1111_20180322043700.ts.png
-rw-r--r-- 1 mythtv mythtv 11G 2018 年 3 月 22 日 1171_20180322060700.ts
-rw-r--r-- 1 mythtv mythtv 5.6G 2018 年 3 月 22 日 1111_20180322063000.ts
-rw-rw-rw- 1 mythtv mythtv 1.4M 2018 年 3 月 22 日 1051_20180322033500.ts.png
-rw-r--r-- 1 mythtv mythtv 3.2G 2018 年 3 月 22 日 1051_20180322070000.ts
-rw-r--r-- 1 mythtv mythtv 5.7G 2018 年 3 月 22 日 1051_20180322060700.ts
-rw-r--r-- 1 mythtv mythtv 3.2G 2018 年 3 月 22 日 1051_20180322053700.ts
-rw-r--r-- 1 mythtv mythtv 1.6G 2018 年 3 月 22 日 1111_20180322053700.ts
-rw-r--r-- 1 mythtv mythtv 6.4G 2018 年 3 月 22 日 1051_20180322043700.ts
-rw-r--r-- 1 mythtv mythtv 5.4G 2018 年 3 月 22 日 1171_20180322043700.ts
-rw-rw-rw- 1 mythtv mythtv 1.4M 2018 年 3 月 22 日 1171_20180322030000.ts.png
-rw-rw-rw- 1 mythtv mythtv 3.4M 2018 年 3 月 22 日 1051_20180322030100.ts.png
-rw-r--r-- 1 mythtv mythtv 2.1G 2018 年 3 月 22 日 1111_20180322043700.ts
-rw-rw-rw- 1 mythtv mythtv 511K 2018 年 3 月 22 日 1111_20180322030000.ts.png
-rw-r--r-- 1 mythtv mythtv 6.6G 2018 年 3 月 22 日 1051_20180322033500.ts
-rw-r--r-- 1 mythtv mythtv 3.8G 2018 年 3 月 22 日 1111_20180322033500.ts
-rw-r--r-- 1 mythtv mythtv 3.3G 2018 年 3 月 21 日 1171_20180322030000.ts
-rw-r--r-- 1 mythtv mythtv 3.7G 2018 年 3 月 21 日 1051_20180322030100.ts
-rw-r--r-- 1 mythtv mythtv 2.4G 2018 年 3 月 21 日 1111_20180322030000.ts
-rw-r--r-- 1 mythtv mythtv 3.3G 2018 年 3 月 21 日 1051_20180321233000.ts
-rw-rw-rw- 1 mythtv mythtv 725K 2018 年 3 月 21 日 1111_20180321200000.ts.png
-rw-rw-rw- 1 mythtv mythtv 2.6M 2018 年 3 月 21 日 1051_20180321200000.ts.png
-rw-r--r-- 1 mythtv mythtv 2.9G 2018 年 3 月 21 日 1051_20180321200000.ts
-rw-r--r-- 1 mythtv mythtv 1.8G 2018 年 3 月 21 日 1111_20180321200000.ts
-rw-rw-rw- 1 mythtv mythtv 897K 2018 年 3 月 21 日 1111_20180321163000.ts.png
-rw-r--r-- 1 mythtv mythtv 3.2G 2018 年 3 月 21 日 1051_20180321163000.ts
-rw-r--r-- 1 mythtv mythtv 2.0G 2018 年 3 月 21 日 1111_20180321163000.ts
-rw-r--r-- 1 mythtv mythtv 2.0G 2018 年 3 月 21 日 1111_20180321160000.ts
-rw-r--r-- 1 mythtv mythtv 102M 2018 年 3 月 21 日 1171_20180321160000.ts
-rw-r--r-- 1 mythtv mythtv 26G 2018 年 3 月 21 日 1051_20180321110000.ts
-rw-r--r-- 1 mythtv mythtv 8.1G 2018 年 3 月 21 日 1111_20180321110000.ts
-rw-r--r-- 1 mythtv mythtv 3.3G 2018 年 3 月 21 日 1171_20180321100000.ts
-rw-r--r-- 1 mythtv mythtv 6.2G 2018 年 3 月 21 日 1051_20180321100000.ts
-rw-r--r-- 1 mythtv mythtv 3.9G 2018 年 3 月 21 日 1111_20180321100000.ts
-rw-rw-rw- 1 mythtv mythtv 743K 2018 年 3 月 20 日 1281_20180321010000.ts.png
-rw-rw-rw- 1 mythtv mythtv 867K 2018 年 3 月 20 日 1281_20180321002000.ts.png
drwxr-xr-x 12 root root 4.0K 2018 年 3 月 20 日 ..
drwx------ 2 root root 16K 2018 年 2 月 28 日丟失+找到
Programs recorded Friday will be recorded again today (Monday)週五錄製的節目今天(週一)再次錄製
這三個程序上週五使用了大約 40GB。 9點30分,記錄表中最後13.4G被刪除。 我不確定其他 15G 是從哪裡來的。 也許刪除隊列已經有一些文件。 也許這些是按照最早的順序添加的,在其他一些之後……我盡量不錄製白天的電視節目,所以可能要到今晚我才能看到更多文件被刪除。 (是的,它正在發生!)我希望 png(巨型)縮略圖也能照顧好自己,現在下結論還為時過早。
我對 JMP 和 SQL 的了解:如果不需要連接(文件→數據庫→打開表),有一種非常簡單的方法可以將 SQL 表加載到 JMP 數據表中。加入(文件→數據庫→查詢生成器。)這兩個還在表中生成一個可以重用的 JSL 腳本。 而且,如果您需要更新數據庫,您需要使用 ExecueSQL() 函數,但您可以讓查詢生成器生成幾乎滿足您需要的 SQL,然後更改它並執行 UPDATE/SET。
我過去曾在 JMP 之外完成過一些 SQL 工作。 我發現使用 JSL 執行一些非 SQL 工作(創建虛擬文件、製作磁盤使用情況圖)真的很棒,這有助於我更好地理解數據庫。
https://code.mythtv.org/cgit/mythtv/tree/mythtv/programs/mythbackend/autoexpire.cpp與清理舊文件相關的 MythTV 源代碼的起點
https://en.wikipedia.org/wiki/Cord-cutting
看起來一切都恢復正常了。 這張最終圖表顯示了不同站點如何優化其可用帶寬。 帶寬可分為一個或多個通道;更多的通道減少意味著更少的數據來製作高質量的圖像。 其中一個地方電視台也選擇了 720 60FPS 而不是 1080 30FPS,這可能意味著這不是一個同類比較。 每個突出顯示的頻道可能有一個或多個來自與其共享帶寬的同一電台的其他頻道。 底部灰色的站點可能正在同時播放多部老電影,或者購物頻道。 它們已從圖例中刪除。
Lines with bigger slope have more bandwidth allocated to the picture斜率越大的線分配給圖片的帶寬越多