小编Rob*_*ert的帖子

Postgresql从表性能与MySql中选择*

我有一个MySQL数据库,我正在移植到PostgreSQL(因为GIS功能).

许多表都有数十万行,因此我需要牢记性能.

我的问题是PostgreSQL看起来非常缓慢......

例如,如果我在MySQL数据库中的特定表上执行简单的SELECT*FROM [table],假设有一个包含113,000行的表,则查询大约需要2秒才能返回数据.在PostgreSQL中,同一个表上完全相同的查询需要大约10秒钟.

同样,我有另一个表,行数较少(88,000),而且更糟糕!MySQL需要1.3秒,PostgreSQL需要30秒!

这是我对PostgreSQL的期望,还是我可以做些什么来让它变得更好?

我的操作系统是XP,我正在运行一个带有3GB内存的2.7ghz双代码.MySQL数据库是5.1版,运行库存标准.PostgreSQL数据库是版本8.4,我编辑了如下配置:shared_buffers = 128MB effective_cache_size = 512MB

谢谢!

这是第二个表的结构,有大约88,000行:

CREATE TABLE nodelink
(
  nodelinkid serial NOT NULL,
  workid integer NOT NULL,
  modifiedbyid integer,
  tabulardatasetid integer,
  fromnodeid integer,
  tonodeid integer,
  materialid integer,
  componentsubtypeid integer,
  crosssectionid integer,
  "name" character varying(64) NOT NULL,
  description character varying(256) NOT NULL,
  modifiedbyname character varying(64) NOT NULL, -- Contains the values from the old engine's ModifiedBy field, since they don't link with any user
  linkdiameter double precision NOT NULL DEFAULT 0, …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql performance

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

是否可以使用 PdfSharp/Migradoc 为所有页面设置背景图像?

我正在使用 PDFSharp/Migradoc 从我的 Web 应用程序生成 PDF,并且我已经设法为文档的第一页获取背景图像。

我首先在文档中创建一个部分,然后为其渲染图像。然后,我将文档内容写入同一节对象内的段落对象。

但是,我需要为文档中的所有后续页面显示不同的背景图像。

这可能吗?如果是这样,我该怎么办?

答案: 为了提供完整的答案,以下是使其正常工作的基本代码:

Section section = this.document.AddSection();

section.PageSetup.DifferentFirstPageHeaderFooter = true;
section.PageSetup.OddAndEvenPagesHeaderFooter = false;

Image firstPageImage = section.Headers.FirstPage.AddImage("firstPage.jpg");
// ...configure image...
Image otherPageImage = section.Headers.Primary.AddImage("everyOtherPage.jpg");
// ...configure image...
Run Code Online (Sandbox Code Playgroud)

c# pdfsharp migradoc

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

从Postgresql函数返回自定义类型

我正在尝试从PostgreSQL函数返回自定义类型,如下所示:


DROP TYPE IF EXISTS GaugeSummary_GetDateRangeForGauge_Type CASCADE; -- Drop our previous type

CREATE TYPE GaugeSummary_GetDateRangeForGauge_Type AS   -- Recreate our type    
(
    Minimum timestamp without time zone,
    Maximum timestamp without time zone
);


CREATE OR REPLACE FUNCTION GaugeSummary_GetDateRangeForGauge
(
    GaugeID integer
)
RETURNS GaugeSummary_GetDateRangeForGauge_Type AS 
$$
DECLARE
    iGaugeID ALIAS FOR $1;
    oResult     GaugeSummary_GetDateRangeForGauge_Type%ROWTYPE;
BEGIN
    SELECT INTO oResult
        min(ArchivedMinimumTime) as Minimum, 
        max(TelemeteredMaximumTime) as Maximum 
    FROM GaugeSummary 
    WHERE GaugeID = $1;

    RETURN oResult;
END;
$$ LANGUAGE plpgsql;

SELECT GaugeSummary_GetDateRangeForGauge(2291308);
Run Code Online (Sandbox Code Playgroud)

我遇到了两个问题.

1) - 我的结果作为单个列回复为"("1753-01-01 …

postgresql types rowtype

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

我如何单元测试返回PartialViewResult的MVC Action?

我有Action如下:

public PartialViewResult MyActionIWantToTest(string someParameter) 
{
    // ... A bunch of logic
    return PartialView("ViewName", viewModel);
}
Run Code Online (Sandbox Code Playgroud)

当我检查结果时,它有一些属性,但它们是null或空.唯一具有任何内容的属性是ViewEngineCollection不包含任何特定于我的方法的内容.

有没有人有一些测试的示例代码PartialViewResult

c# model-view-controller action

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

是否可以在不受信任的程序集(c#)中检测递归函数?

我正在编写一些可以加载第三方程序集的c#.

如果第三方决定是恶意的,他们可以编写一个递归函数,最终会出现在StackOverflowException中,从而导致我的应用程序崩溃.

是否可以检测递归函数?

更新: 对于像while(true)或(;;)这样的不良状态,我已经有了解决方案.本质上,我在一个单独的线程中运行第三方代码,如果线程花费的时间超过固定的持续时间,我就拔掉插件.这不适用于递归,因为达到堆栈限制非常快.

更新: 也许我错误地表达了我所追求的解决方案.如果我最终得到大量故意恶意代码,我将更改应用程序以在单独的进程中运行第三方代码.但是在这个阶段,我假设代码只会导致问题,因为它编写得很糟糕.

接受的答案 我已经决定最好的方法是在一个单独的过程中运行第三方库.我可以运行多个进程实例,甚至可以跨进程对我的第三方库进行一种负载平衡.如果执行杀死其中一个进程的恶意代码,我应该能够检测到哪个库将其杀死,将该库标记为恶意,并使用所有非恶意库重新启动该进程.

感谢大家的好建议!

c# recursion

5
推荐指数
2
解决办法
1368
查看次数

value ===不是类型参数TKey的成员(使用Squeryl)

我正在尝试使用优秀的squeryl ORM框架编写一个简单的BaseDao类.

但是,当使用通用类型键时,我遇到了一个问题.当我尝试在我的通用BaseDao类中使用'==='运算符时,我收到编译错误.编译错误是:value ===不是类型参数TKey的成员

我的dao类及其麻烦的方法定义为:

import org.squeryl.PrimitiveTypeMode._
import org.squeryl._

abstract class BaseDao[TKey, T <: BaseEntity[TKey]](val table: Table[T]) {

  def delete(entity: T) : Boolean = {
    table.deleteWhere(record => record.id === entity.id) //This is where I get the compile error
  }
}
Run Code Online (Sandbox Code Playgroud)

BaseEntity定义为:

abstract class BaseEntity[TKey] extends KeyedEntity[TKey]
Run Code Online (Sandbox Code Playgroud)

我也在我的Dao类中导入PrimitiveTypeMode ...我的第一个虽然是TKey需要被约束到===运算符被约束的任何东西,但是在查看源代码时,似乎没有任何明确的约束操作员,所以我有点迷茫.

运算符在这里的squeryl源中定义:https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/dsl/TypedExpression.scala

generics scala squeryl

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

处理多个事件的状态转换

我有一个MassTransitStateMachine,它编排一个涉及创建多个事件的过程.

一旦完成所有事件,我希望状态转换到"清理"阶段.

这是相关的状态声明和过滤功能:

        During(ImportingData,
            When(DataImported)
                // When we get a data imported event, mark this source as done. 
                .Then(MarkImportCompletedForLocation),

            When(DataImported, IsAllDataImported)
                // Once all are done, we can transition to cleaning up...
                .Then(CleanUpSources)
                .TransitionTo(CleaningUp)
        );


    ...snip...


    private static bool IsAllDataImported(EventContext<DataImportSagaState, DataImportMappingCompletedEvent> ctx)
    {
        return ctx.Instance.Locations.Values.All(x => x);
    }
Run Code Online (Sandbox Code Playgroud)

因此,虽然状态是ImportingData,但我希望收到多个DataImported事件.每个事件都将其位置标记为已完成,以便IsAllDataImported方法可以确定是否应该转换到下一个状态.

但是,如果最后两个DataImported事件同时到达,则转换到CleaningUp阶段的处理程序将触发两次,最后我尝试执行两次清理.

可以在自己的代码中解决这个问题,但我期待状态机能够管理它.我做错了什么,或者我只是需要自己处理争用?

masstransit automatonymous

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

您使用什么方法来识别域驱动器设计中的聚合根?

将域驱动设计应用于项目时,如何识别聚合根?

例如,在标准的电子商务网站中,您可能会说订单是一个,而用户是另一个.但是,如果您的用户属于公司,该怎么办?这会使您的公司成为集合根吗?

我有兴趣听取人们制定聚合根的方法,以及如何识别选择不当的聚合根.

domain-driven-design aggregate root

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