我刚开始为一家规模合理的公司开展我的第一份开发工作,该公司必须管理大量数据.平均数据库是6GB(从我到目前为止看到的).其中一项工作是报道.目前的工作方式是 -
数据被复制并传输到数据仓库.从那里,收集特定报告所需的所有数据(数千行和大量表)并汇总到仓库中的报告数据库.这一切都是通过存储过程完成的.
请求报告时,将调用存储过程,该过程将数据复制到PHP读取的报告数据库以显示数据.
我根本不是存储过程的忠实粉丝.但是我所说过的人坚持认为存储过程是唯一的选择,因为通过编程语言直接查询数据的速度非常慢(想想30分钟?).安全也是一个问题.
所以我的问题是 - 当你有一个非常大的数据集时,是否需要存储过程?对于如此大量的数据,查询是否确实需要很长时间,或者DB服务器是否存在问题或数据的排列方式(以及索引?).我感觉有些不对劲.
database sql-server performance database-design stored-procedures
为了了解使用MVC和Linq to SQL的一些基础知识,我正在努力改编Stephen Walther的TaskList应用程序:
我正在使用Steve Sanderson博客中描述的概念添加批量编辑系统.
这一切都按预期工作,但是,我在保存返回的任务列表时遇到问题.发布到我的BulkEdit循环返回列表并更新我的LinqToSql db任务列表中的每个项目.
我的BulkEdit视图继承ViewPage<List<TaskList.Models.Task>>
并如下所示:
<%
using (Html.BeginForm())
{
%>
<div id="items">
<%
foreach (var task in ViewData.Model)
{
Html.RenderPartial(
"TaskEditor",
task,
new ViewDataDictionary(ViewData)
{
{"prefix", "tasks"}
}
);
}
%>
</div>
<input type="submit" value="Save changes" />
<%
}
%>
Run Code Online (Sandbox Code Playgroud)
TaskEditor控件继承System.Web.Mvc.ViewUserControl<Models.Task>
并如下所示:
<div>
<%= Html.Hidden(ViewData["prefix"] + ".index", ViewData.Model.Id) %>
<% var fieldPrefix = string.Format("{0}[{1}].", ViewData["prefix"], ViewData.Model.Id); %>
<%= Html.Hidden(fieldPrefix + "Id", ViewData.Model.Id) %>
Description:
<%= Html.TextBox(fieldPrefix + "TaskDescription", ViewData.Model.TaskDescription)%> …
Run Code Online (Sandbox Code Playgroud) 首先让我说我不是JavaScript开发人员所以这个问题可能是相当基本的.
在模拟all
我正在使用的IE非标准属性时getElementsByTagName("*")
,两种方法之间是否存在显着的性能差异?
作为Charles Petzold的书籍Code and The Annotated Turing的忠实粉丝,我看到了他的书" 编程Windows",该书在C语言中教授Win32编程.我是一名新生计算机科学专业的学生,他先学习C语言,但我现在使用C#和.NET进行Windows编程,所以我想知道Win32是否仍然与专业的Windows程序相关.作为一名想要编写Windows应用程序的学生,我是否值得学习Win32 API到本书涵盖的深度?
我需要更改由另一个无法访问的用户锁定的文件.如何在不必使用Visual Studio 2008 TFS中的帐户登录的情况下解锁文件?
SQL总是有一个很棒的功能:级联删除.你事先计划好,什么时候删除东西,BAM!无需担心所有这些依赖记录.
但是,现在实际上删除任何东西几乎都是禁忌.您将其标记为已删除并停止显示.不幸的是,当存在依赖记录时,我无法找到可靠的解决方案.我总是手动编写复杂的软删除网络.
那里有一个我完全错过的更好的解决方案吗?
我有一个程序(除此之外)有一个命令行界面,让用户输入字符串,然后通过网络发送.问题是我不确定如何将在GUI内部生成的事件连接到网络接口.假设我的GUI类层次结构如下所示:
GUI - > MainWindow - > CommandLineInterface - > EntryField
每个GUI对象都包含一些其他GUI对象,一切都是私有的.现在,entryField对象生成一个已输入消息的事件/信号.目前我正在将信号传递给类层次结构,因此CLI类看起来像这样:
public:
sig::csignal<void, string> msgEntered;
Run Code Online (Sandbox Code Playgroud)
而在c'tor:
entryField.msgEntered.connect(sigc::mem_fun(this, &CLI::passUp));
Run Code Online (Sandbox Code Playgroud)
passUp函数只是为拥有类(MainWindow)再次发出信号才能连接,直到我最终可以在主循环中执行此操作:
gui.msgEntered.connect(sigc::mem_fun(networkInterface, &NetworkInterface::sendMSG));
Run Code Online (Sandbox Code Playgroud)
现在这似乎是一个非常糟糕的解决方案.每次我向GUI添加内容时,我都必须通过类层次结构将其连接起来.我确实看到了几种方法.我可以将所有对象公开,这将允许我在主循环中执行此操作:
gui.mainWindow.cli.entryField.msgEntered.connect(sigc::mem_fun(networkInterface, &NetworkInterface::sendMSG));
Run Code Online (Sandbox Code Playgroud)
但这违背了封装的想法.我还可以在整个GUI上传递对网络接口的引用,但我希望尽可能保持GUI代码的分离.
感觉我在这里缺少必要的东西.有干净的方法吗?
注意:我正在使用GTK +/gtkmm/LibSigC++,但我没有标记它,因为我和Qt有同样的问题.这是一个普遍的问题.
有没有办法告诉我在交易中是否有未提交的工作(即DML)?也许我可以查询数据字典视图?
从运行开放事务的会话的内部和外部发现这一点的方法将是受欢迎的.
谢谢
我有2个表,具有以下结构..
category
{
sub_cat_id - numeric
sub_cat_name - varchar
main_cat_id - varchar (2 characters)
main_cat_name - varchar
}
products
{
pid - autoincrement
pname - varchar
category (Will be either sub_cat_id or main_cat_id)
}
Run Code Online (Sandbox Code Playgroud)
产品表
pid pname category
1 mobile EL
2 shoes 1
3 shirt 1
4 TV EL
5 mp3 player EL
Run Code Online (Sandbox Code Playgroud)
我想得到products表中每个类别的计数,这样我的查询返回2表示类别1,3表示类别EL
有人可以帮我这个吗?
c++ ×2
sql ×2
asp.net-mvc ×1
c ×1
c# ×1
database ×1
javascript ×1
linq ×1
linq-to-sql ×1
mysql ×1
oracle ×1
performance ×1
soft-delete ×1
sql-server ×1
tfs ×1
transactions ×1
winapi ×1