我们正在寻找在某种云服务上存储我们网站媒体(此时主要是图像)的选项。但是,我们想知道它可能花多少钱。
作为其中的一部分,我们需要进行传输(在IIS中未启用日志记录,但现在是)以及我们将在服务器上存储的图像总量。
我已经对数据库写了a LINQ query,但我想知道是否有更好的方法来处理这个问题。
将App_Data\MediaCache
目录检查为Sitecore Database and App_Data Size建议的接受答案,其中也显示了许多配置文件和其他文档,因此可能不太理想。
有什么建议吗?谢谢!
答案 0 :(得分:1)
如果您的所有媒体都存储在数据库中,那么通过查看主数据库中的Blobs表,您可以获得非常好的近似值。
EXEC sp_spaceused N'dbo.Blobs';
如果您有混音,则必须查看Media.FileFolder
Sitecore设置中的配置位置(默认为/App_Data/MediaFiles
)。
答案 1 :(得分:1)
这是@ddysart建议的补充。您可以运行以下查询以查找超过特定大小的媒体内容的数量。
SELECT DATALENGTH([Data]) FROM [Sitecore_DatabaseName].[dbo].[Blobs]
WHERE DATALENGTH([Data]) > <size_in_bytes>
答案 2 :(得分:1)
无论项目是存储在数据库中还是存储在磁盘上,Sitecore都会在您创建或更新媒体项目时在媒体项目定义的Size
字段中以字节为单位存储媒体文件的大小。您可以将这些值相加以得出总数。
带Unversioned
模板的媒体存储在SharedFields
表格中:
SELECT SUM(CAST([Value] as INT))
FROM [SharedFields]
WHERE FieldId = '6954B7C7-2487-423F-8600-436CB3B6DC0E'
Versioned
媒体存储在VersionedFields
表格中。您可能只对最新版本的上传媒体感兴趣,以减少CDN / Cloud中存储的数量:
SELECT SUM(CAST(vf.[Value] as INT))
FROM [VersionedFields] AS vf
INNER JOIN (
SELECT [ItemId], MAX([Version]) AS [Version]
FROM [VersionedFields]
GROUP BY [ItemId]) AS [vf1]
ON vf.ItemId = vf1.ItemId
AND vf.[Version] = vf1.[Version]
WHERE vf.FieldId = '5BE6C122-84C9-4661-A0C9-3718909C8DAD'
请注意,返回的大小以字节为单位。