小编Mik*_*sen的帖子

文档存储的推荐位置 - 在数据库或其他地方?

背景:

我们有很久以前实施的内部文件存储系统.无论出于何种原因,选择使用数据库作为文档的存储机制.

我的问题是:

存储文档的最佳做法是什么?有哪些替代方案?优缺点都有什么? 答案不一定是技术或平台特定的,它更像是一般的最佳实践问题.

我的想法:

数据库不适用于文档存储.文件系统或第三方文档管理系统可能会更好用.数据库中的文档存储是昂贵的.操作很慢.这些逻辑假设是什么?也许这是最好的,但在我看来,我们有更好的选择.oracle BFILE(链接到NAS或SAN上的文档)能否优于BLOB/CLOB?

细节:

  • 文件种类繁多(pdf,word,xml)
  • 中间层代码是用.net 2.0/c#编写的
  • 文档通过压缩存储在BLOB中的Oracle 10g数据库中(NAS存储)
  • 文件大小愤怒
  • 文件数量急剧增加,并没有放缓的迹象
  • 在峰值期间,插入物通常是每小时的hunderds
  • 在高峰期,回归通常是每小时数千
  • NAS存储和SAN存储可用

更新(来自以下问题):

  • 我的背景是发展
  • 有关于存储在数据库中文件旁边的文件的关联元数据

database architecture storage documents

18
推荐指数
5
解决办法
7258
查看次数

如何在AngularJS中的父控制器或作用域中访问FormController

我有一个包含多种表单的页面,我只想一次显示一个.为此,我将每个表单分成一个部分并使用Bootstrap的手风琴插件我一次只允许一个打开的部分.

我的标记看起来像这样:

<a ng-click="open_section('section1')">Section 1</a>

<div collapse="section1">
  <form name="section1Form">
  </form>
</div>

<a ng-click="open_section('section2')">Section 2</a>

<div collapse="section2">
  <form name="section2Form">
  </form>
</div>
Run Code Online (Sandbox Code Playgroud)

一切正常,我可以在表格等之间导航

因为我不希望用户打开一个部分,如果他们当前正在编辑的部分包含验证错误,我尝试检查open_section函数是否与之关联的表单有效.

我试过了,但我做不到.我无法访问与负责页面的控制器中的表单关联的FormController.出于某种原因,他们没有在范围上发表.

这是我试过的:

  • $scope.section1Formundefined

  • 尝试过$scope.$watch('section1Form, function(){}),仍未定义

  • 尝试添加表单的名称作为第二个参数,open_section如此:open_section('section1', section1Form)但在函数中第二个参数是undefined.

<form></form>标签之间,我可以访问FormController,但在我们之外我没有.由于事件来自<form>(关闭,打开部分)之外,我无法将FormController传递给我的控制器以检查我的表单的有效性.

有没有办法解决这个问题,还是应该重构我的页面?

我正在使用Angular 1.1.5顺便说一句.

另外,使用AngularJS Batarang Chrome插件进行检查,我可以看到表单作为子范围发布到当前范围.

编辑:这是范围层次结构查找此应用程序的方式

 - root
 |
 ---current controller\'s scope
 |
 ----scope that contains the forms
Run Code Online (Sandbox Code Playgroud)

这是因为我正在使用ng-include?那么在控制器中无法访问这些表单吗?

javascript forms angularjs angularjs-scope

16
推荐指数
3
解决办法
1万
查看次数

远程 DLL 注册,无需访问 HKEY_CLASSES_ROOT

我们有一个遗留的 VB6 应用程序,它在启动时通过拉取最新文件并注册 COM 组件来更新自身。这适用于在另一台计算机上的 COM+ 中注册的本地 (regsvr32) ActiveX COM 组件和远程 (clireg32) ActiveX COM 组件。

出于安全原因,新要求阻止我们写入 HKEY_LOCAL_MACHINE (HKLM),这显然是调用 regsvr32 和 clireg32 时默认发生的情况。

我们提出了一种使用RegOverridePredefKey Windows API 方法在 HKEY_CURRENT_USER\Software\Classes (HKCU) 下注册本地 COM 组件的方法。这是通过将注册表中的插入重定向到 HKCU 位置来实现的。然后,当COM组件被实例化时,Windows首先查找HKCU,然后再在HKLM中查找组件信息。这取代了 regsvr32 正在做的事情。

我们此时遇到的问题是,当我们尝试使用clireg32注册VBR/TLB时,此注册过程还将注册键添加到HKEY_LOACL_MACHINE中。

有没有办法重定向 clireg32.exe 以注册组件为 HKEY_CURRENT_USER?是否有任何其他方法允许我们在安全访问受限的客户端计算机上注册这些 COM+ 组件?

目前我们唯一的解决方案是手动将注册信息写入注册表,但这并不理想,并且会成为一个维护问题。

vb6 regsvr32 dcom com+ clireg32

3
推荐指数
1
解决办法
1567
查看次数

c#lambda表达式 - 将委托结果添加到通用列表

问题:我刚刚使用c#lambda表达式编写了我的第一个代码.它有效,但我不确定这是否是最好的方法.关于更好地进行lambda表达式的任何建议?在表达式中有很多行代码似乎很奇怪,就像我在下面所做的那样.

背景:我有一个通用的代表列表.每个委托函数返回一个枚举值,指示函数中发生的事情.在评估委托时,我需要将枚举添加到List中,如果它不是特定的枚举值.

免责声明:这里的代码非常通用,真正的代码实际上在委托中确定返回值!


class Class1
{
    public enum WhatHappened
    {
        ThingA,
        ThingB,
        Nothing
    }

    private delegate WhatHappened del();

    public static List<WhatHappened> DoStuff()
    {
        List<del> CheckValues = new List<del>();

        List<WhatHappened> returnValue = new List<WhatHappened> { };

        CheckValues.Add(delegate { return method1(); });
        CheckValues.Add(delegate { return method2(); });

        CheckValues.ForEach(x =>
        {
            WhatHappened wh = x();
            if (wh != WhatHappened.Nothing)
                returnValue.Add(wh);
        });

        return returnValue;

    }

    private static WhatHappened method1()
    {
        return WhatHappened.Nothing;
    }

    private static WhatHappened method2()
    {
        return WhatHappened.ThingA;
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# lambda .net-3.5

1
推荐指数
1
解决办法
3752
查看次数