您经常会看到数据库字段设置为255个字符,传统/历史原因是什么?我认为它与分页/内存限制和性能有关,但255和256之间的区别总是让我感到困惑.
varchar(255)
Run Code Online (Sandbox Code Playgroud)
考虑到这是容量或幅度,而不是索引器,为什么255优先于256?是为某种目的保留的字节(终止符还是null或其他)?
推测varchar(0)是无意义的(零容量)?在这种情况下,2 ^ 8的空间应该是256?
是否有其他量级可以提供性能优势?例如,varchar(512)的性能低于varchar(511)或varchar(510)?
对于所有新旧关系数据库,此值是否相同?
免责声明 - 我是开发人员而不是DBA,我使用适合我的业务逻辑的字段大小和类型,但我想知道这种偏好的历史原因,即使它不再相关(甚至是更多,如果它仍然相关).
感谢您的回答,似乎有一些共识认为一个字节用于存储大小,但这并不能在我的脑海中明确解决问题.
如果元数据(字符串长度)存储在相同的连续内存/磁盘中,则有一定意义.1个字节的元数据和255个字节的字符串数据非常适合彼此,并且适合256个连续的存储字节,这可能是整洁的.
但是......如果元数据(字符串长度)与实际字符串数据(可能在主表中)分开存储,那么将字符串数据的长度约束一个字节,只是因为它更容易只存储1个字节的整数元数据似乎有点奇怪.
在这两种情况下,它似乎都是一个微妙的可能取决于数据库的实现.使用255的做法似乎相当普遍,所以某个地方的人必须在一开始就为它辩护一个好的案例,有人能记住那个案例是什么吗?程序员在没有理由的情况下不会采用任何新的做法,这必须是新的一次.
nvarchar(max),varchar(max),或者我应该真正解码字符串并将其放在图像或blob中?
我有一个.Net SOAP Web服务,它将记录保存在SQL 2008 DB中.该服务将被扩展为接受图像,该图像(无论好坏)也需要暂时进入数据库.
为了简单起见,该服务将图像作为Base 64编码的字符串,并且必须稍后将其作为base64编码的字符串(在同一服务上使用不同的方法).
我本来打算使用nvarchar(max),我相信这会有用.但后来我认为base64编码意味着它可以使用varchar(max),并使用更少的存储空间.这是正确的吗?或者我应该咬紧牙关并将文本解码为二进制文件,将其存储为blob,然后在再次出路时重新编码?
最后 - 负载存储和性能不太可能导致问题,这是一个宠物项目,并将是低负载.
编辑:为了回应@ howiecamp的问题,我在这里写了我是如何编码图像的URL:http://www.flowerchild.org.uk/archive/2010/06/13/base-64-encoding-an-image -to-通跨-A-web.html
有一些例子可以从d3.js中的外部json文件中获取数据.但是这些样本没有显示json,所以我真的想看看它是如何工作的.
我有这个json文件test.json,它看起来像
[
{"a":"-1.14","b":"4.14"},
{"a":"-0.13","b":"1.38"},
{"a":"-4.19","b":"1.43"},
{"a":"-0.21","b":"3.34"}
]
Run Code Online (Sandbox Code Playgroud)
我想用这些数据制作一个散点图.
在d3.js脚本中.到目前为止我添加了.
var width = 400;
var height = 400;
var x = d3.scale.linear()
.domain ([-5, 5])
.range([0, width]);
var y = d3.scale.linear()
.domain ([-5, 5])
.range([0, height]);
var chart = d3.select("body").append("svg")
.attr("width", width+70)
.attr("height", height+70)
.attr("class", chart)
.append("g")
.attr("transform", "translate(30, 30)");
chart.selectAll("xline")
.data(x.ticks(11))
.enter().append("line")
.attr("x1", x)
.attr("x2", x)
.attr("y1", 0)
.attr("y2", height)
.style("stroke", "#ccc");
chart.selectAll("yline")
.data(y.ticks(11))
.enter().append("line")
.attr("y1", y)
.attr("y2", y)
.attr("x1", 0)
.attr("x2", width)
.style("stroke", "#ccc");
Run Code Online (Sandbox Code Playgroud)
如果我使用这个数据集:
var dataset = …Run Code Online (Sandbox Code Playgroud) 我们有一个相当标准的电子商务场景,其中包含类别中的产品分页列表.无论好坏,大约80%的访问者从未浏览过第一页,根据类别,可能会有5-10多个结果页面,这些页面的查看次数要少得多.(是的,我们会优化第一页上显示的内容并进行良好的搜索 - 但这是一个不同的讨论)
我们无法缓存每一页的结果,因为我们受到内存的限制,但是缓存每个类别的第一页结果的好处将是巨大的.
我知道我可以使用对象缓存来存储有问题的数据集,但这可能是使用输出缓存,也许是通过使用response.Cache对象?
页面生命周期中的哪个位置可以完成?预渲染?
很简单,URL就像"/ ProductList?Category = something&Page = 1"而且我想要逻辑类似(伪代码):
If paramater "Page" equals 1
Use output caching: vary by param = "categoryName; page"
else
Don't use caching at all, just render the page from scratch.
Run Code Online (Sandbox Code Playgroud)
我们在IIS 6/win2003上使用ASP.NET 2.0.
我必须编辑一个XSLT样式表,但我是盲目的,因为XML输入仅在一堆流中短暂存在.我可以调试代码,但无法弄清楚如何将流的内容输出到我可以看到的文本中(并在我编辑它们时手动运行XSLT).
代码是一个很大的遗留系统的一部分,我可以在调试环境中修改它,如果绝对必要,但它运行在一个连接到一堆MSMQ的Windows服务中.因此,出于各种原因,我宁愿能够使用调试器来查看XML,而无需先更改代码.
代码大大简化了,就像这样:( C# - 但在VS 2003中记住它是.net 1.1.)
这是将XML作为流获取的函数,然后将其提供给某种XSLT转换对象.我已经尝试在监视窗口和即时窗口中查看writer和xmlStream对象,但无法理解如何查看实际的XML.
private MemoryStream GetXml()
{
MemoryStream xmlStream;
xmlStream = new MemoryStream();
XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8);
writer.WriteStartDocument();
//etc etc...
writer.WriteEndDocument();
writer.Flush();
xmlStream.Position = 0;
return xmlStream; //Goes off to XSLT transform thingy!
}
Run Code Online (Sandbox Code Playgroud)
所有人都非常感谢.
在测试时有没有办法将属性注入Java Manifest(或注入整个清单)?
我们正在读取清单(版本号)中的值,该值在测试时解析为null.
到目前为止,我们已经尝试在我们的测试根中添加一个硬编码的MANIFEST.MF文件,但它没有用.
这是我们用来读取清单的代码:
private Attributes getManifest() {
URLClassLoader cl = (URLClassLoader) getClass().getClassLoader();
Manifest manifest;
try {
URL url = cl.findResource("META-INF/MANIFEST.MF");
manifest = new Manifest(url.openStream());
} catch (IOException e) {
throw Throwables.propagate(e);
}
return manifest.getMainAttributes();
}
Run Code Online (Sandbox Code Playgroud)
作为最后的手段,我们将包装读取清单并模拟它的功能,但这些是集成测试,并且应该是黑盒子(即,我们避免嘲笑).
额外信息:Java 7,在IntelliJ或Gradle中运行Junit测试.
当它生成代理到Web服务时,是否可以让WSDL.exe生成接口以及代替具体类?
我们正在从ASP.Net应用程序中使用第三方Web服务,并且使用WSDL.exe生成了我们的代理类,并且很好.
我现在想通过伪造Web服务来编写针对我的包装器和业务类的测试.代理没有接口或抽象基类,它们被标记为内部,这意味着如果不将我的Fake/mock测试代码放入我的业务项目/程序集中,我就无法继承它们.
我可以手动创建一个接口(使用resharper)并编辑类,但是如果第三部分更改了他们的WSDL/Web服务我或者我的后继者还必须手动编辑接口,并自动生成类,这似乎从来没有像现在这样好理念.
伪造或嘲笑这项服务最优雅的方式是什么?我应该把假货放在商业项目中吗?我应该手动编辑文件并创建界面吗?我应该做一些完全不同的事吗?
我想动态填充当前请求的URI链接,但设置一个特定的查询字符串参数.所有其他查询字符串参数(如果有的话)应保持不变.我事先并不知道它们可能是什么.
例如,假设我想建立一个链接返回到当前页面,但与查询参数"valueOfInterest"一直被设置为"维布勒"(我是从aspx页面的代码隐藏在做这个,的.Net 3.5 C#FWIW).
例如,请求这两个中的任何一个:
/somepage.aspx
/somepage.aspx?valueOfInterest=sausages
Run Code Online (Sandbox Code Playgroud)
会成为:
/somepage.aspx?valueOfInterest=wibble
Run Code Online (Sandbox Code Playgroud)
最重要的(可能)请求:
/somepage.aspx?boring=something
/somepage.aspx?boring=something&valueOfInterest=sausages
Run Code Online (Sandbox Code Playgroud)
会保留无聊的参数成为:
/somepage.aspx?boring=something&valueOfInterest=wibble
Run Code Online (Sandbox Code Playgroud)
注意事项:如果asp.net中更优雅的东西更强大,我想避免字符串操作.但是,如果没有更优雅的东西,那就这样吧.
我做了(一点点)作业:我找到了一篇博文,建议将请求复制到本地HttpRequest对象中,但是仍然有查询字符串参数的只读集合.我也看过使用URI对象,但似乎没有查询字符串
我在一个基于dotnet核心解决方案的小项目中有一个测试项目,在Jetbrains Rider中创建,但它有默认名称"UnitTestProject".(当我添加它时,我认为"命名很难 - 但重命名很容易!").
我在测试中重命名了命名空间,但无法解决如何在Rider中重命名项目本身.
我假设我可以在.csproj和.sln中进行grep并手动重命名,但在我闪亮的新IDE中这肯定会很容易吗?
Rider 2017.2(完整订阅版).
Dotnet核心版本2.03.
Ubuntu 16.04如果重要的话.