2010-12-06 142 views

回答

15

在一個SQLite數據庫中存儲的視頻是一個可怕的想法。不要這樣做。

不要將大的BLOB放入數據庫中。將它們放在數據庫文件旁邊的文件系統中,然後將文件名或URL寫入數據庫。這將更快,將更有效地使用數據庫,將I/O最小化(因爲視頻不必分解成數據庫的分頁方案,並且將使視頻的管理更容易(文件的文件系統delete不必切除了一堆包含BLOB頁)數據庫更快。

把BLOB的數據庫是效率極其低下,並且很可能會打擊你的應用程序的(除非你已經想出了將數據從數據庫傳輸到視頻解碼器的方式)。

它會引發額外的I/O,使用更多的功率,並且性能通常會在你存儲數據庫中的更多項目您將數據庫中的小數據BLOB混合在一起,您可以很容易地得出一個病態碎片數據庫。自動吸塵功能將有所幫助,但效率更低,消耗更多的I/O和更多的電池壽命。


是的,有數據庫可以很好地處理BLOB。它們與這個問題完全無關,只有它的標籤是「iPhone」。

請注意,問題「比文件系統更好地處理BLOB和流媒體」的答案几乎總是要求您使用的數據庫正在讀取/寫入/從原始設備寫入 - 硬盤上的分區驅動器只是數據庫內容。任何其他解決方案都必須是現有文件系統上的一層,即使數據庫供應商已經完成了所有工程工作(並且它非常龐大),以儘可能地匹配他們的數據庫訪問I/O底層文件系統語義。

2

blob數據類型可用於存儲任何二進制數據。具體來說,它代表B(inary)L(arge)Ob(ject)(http://en.wikipedia.org/wiki/Blob_(computing)

+0

翻譯:是的。 +1 :-) – Thilo 2010-12-06 06:23:45

+0

@Thilo,感謝您翻譯我的累贅答案;-) – 2010-12-06 17:39:21

-2

我使用博客存儲視頻到我的SQLite數據庫及其工作良好,我有超過100個視頻存儲在我的數據庫中時間來存儲視頻

+0

您能否給我一個關於存儲視頻和圖像以及blob數據類型的概述? – 2010-12-06 06:32:18

-1
NSData *imageData; 
NSURL *imageURL = [[NSURL alloc] initWithString:[[videolistArray objectAtIndex:[number intValue]] valueForKey:@"video"] ]; 
if (imageURL) { 
    imageData = [NSData dataWithContentsOfURL:imageURL]; 
} 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

if (!documentsDirectory) { 
    NSLog(@"Documents directory not found!"); 
} 
NSArray *myWords = [[NSString stringWithFormat:@"%@",[[videolistArray objectAtIndex:[number intValue]] valueForKey:@"video"]] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; 

NSString *appFile = [documentsDirectory stringByAppendingPathComponent:[myWords lastObject]]; 

[imageData writeToFile:appFile atomically:YES]; 

在iPhone的文檔目錄此我存儲視頻你剛剛將其插入的SQLite數據庫W¯¯

相關問題