2010-12-06 139 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¯¯

相关问题