目前,我在InnoDB表中将图像(最大6MB)存储为BLOB.随着数据量的增长,夜间备份越来越慢,阻碍了正常的性能.
因此,二进制数据需要转到文件系统.(指向文件的指针将保存在数据库中.)
数据具有树关系:
- main site
- user_0
- album_0
- album_1
- album_n
- user_1
- user_n
etc...
Run Code Online (Sandbox Code Playgroud)
现在我希望数据通过目录结构均匀分布.我该怎么做到这一点?
我想我可以尝试MD5('userId, albumId, imageId');
切片结果字符串以获取我的目录路径:
/var/imageStorage/f/347e/013b/c042/51cf/985f7ad0daa987d.jpeg
这将允许我将第一个字符映射到服务器,并将目录结构均匀分布在多个服务器上.
然而,这不会保持每个用户组织的图像,可能将图像分散在多个服务器上的1个专辑中.
我的问题是:
在保持用户/专辑数据在一起的同时,以平衡的方式将图像数据存储在文件系统中的最佳方法是什么?
我在想正确的方向吗?或者这是完全做事的错误方式?
更新:
我将为md5(user_id)
最高级别的拆分进行字符串切片.然后将所有用户数据放在同一个存储桶中.这将确保数据的均匀分布,同时保持用户数据紧密存储在一起.
/var - imageStorage - f/347e/013b - f347e013bc04251cf985f7ad0daa987d - 0 - album1_10 - picture_1.jpeg - 1 - album1_1 - picture_2.jpeg - picture_3.jpeg - album1_11 - picture_n.jpeg - n - album1_n
我想我会使用从后面拆分的albumId(我喜欢这个想法!),以保持每个目录的专辑数量更小(尽管大多数用户不需要).
谢谢!
我正在尝试用函数打印一个新行TextOut
。
我试过
TextOut(hDC, 10, 20, "Hello\nWorld", strlen(text));
Run Code Online (Sandbox Code Playgroud)
但输出是“HelloWorld”。
如何使用 打印新行TextOut
?
我正在尝试从Goutte访问Guzzle Response对象.因为该对象具有我想要使用的好方法.以getEffectiveUrl为例.
据我所知,如果不破解代码,就无法做到这一点.
或者没有访问响应对象,有没有办法获取最后重定向的URL froum goutte?
我正在尝试在字符串中找到子字符串的位置.
#include <string.h>
#include <stdio.h>
void find_str(char const* str, char const* substr)
{
char* pos = strstr(str, substr);
if(pos) {
printf("found the string '%s' in '%s' at position: %d\n", substr, str, pos - str);
} else {
printf("the string '%s' was not found in '%s'\n", substr, str);
}
}
int main(int argc, char* argv[])
{
char* str = "gdeasegrfdtyguh?johh?hugfydsasdrfgthyjkjhghh";
find_str(str, "hh");
find_str("dhenhheme kekekeke hhtttttttttttttttttttttttttttttttttttttttthhtttttttttttt", "hh");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
在'gdeasegrfdtyguhıjohhıhugfydsasdrfgthyjkjhghh'中找到了字符串'hh',位置:19
在'dhenhheme kekekeke hhttttttttttttttttttttttttttttttttttttttttttttttttthtttttttttttttt'中找到字符串'hh',位置:4
在第一个例子中,它表示它处于第19位.但是它不应该说是18吗?因为在第二个例子中它表示4.它从子串的开头开始.
我糊涂了.
我有一个力向图的例子。而且我想显示箭头,但是无论我尝试了什么,我都看不到它们。
这是我的javascript
var nodes = {};
// Compute the distinct nodes from the links.
links.forEach(function(link) {
link.source = nodes[link.source] || (nodes[link.source] = {
name: link.source
});
link.target = nodes[link.target] || (nodes[link.target] = {
name: link.target
});
});
var width = 960,
height = 500;
var force = d3.layout.force()
.nodes(d3.values(nodes))
.links(links)
.size([width, height])
.linkDistance(100)
.charge(-300)
.on("tick", tick)
.start();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("svg:defs").selectAll("marker")
.data(["arrow"])
.enter().append("svg:marker")
.attr("id", "arrow")
.attr("viewBox","0 0 10 10")
.attr("refX","20")
.attr("refY","5")
.attr("markerUnits","strokeWidth")
.attr("markerWidth","9")
.attr("markerHeight","5")
.attr("orient","auto") …
Run Code Online (Sandbox Code Playgroud) 我有一个雄辩的查询,其中orderBy之一是两列的差异.
$mymodel = Level::where([['ColA', 5], ['ColB', 10], ['ColC', 7]])
->orderBy('ColA', 'Desc')
->orderBy('ColA' - 'ColB', 'Desc')
->orderBy('ColC', 'Desc')
->orderBy('ColD', 'Asc')
->pluck('userId')->toArray();
Run Code Online (Sandbox Code Playgroud)
使用sqlite的localhost上完全相同的代码可以正常运行而不会出错.但在使用MySQL进行生产时出现以下错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'order clause' (SQL: select `userId` from `levels` where (`ColA` = 5 and `ColB` = 10 and `ColC` = 7) order by `ColA` desc, `0` desc, `ColC` desc, `ColD` asc)
Run Code Online (Sandbox Code Playgroud)