Авторизация CouchDB для каждой базы данных

I ' m работает над приложением, поддерживаемым CouchDB. По сути, я хочу создать базу данных для каждого отдельного пользователя моего приложения. Для этого пользователь-администратор создаст базу данных, но в дальнейшем пользователю потребуется доступ к своей базе данных (с использованием HTTP-аутентификации через SSL). Я чертовски потратил время, чтобы понять это.

Лучший ресурс, который я нашел, находится в вики CouchDB по этой ссылке:

http://wiki.apache.org/couchdb/Security_Features_Overview#Authorization

Он предполагает, что вы можете установить авторизацию для каждой базы данных создав документ под названием «_security», в который вы добавите хэш администраторов и читателей. Когда я пытаюсь создать этот документ, я получаю сообщение «Плохой специальный член документа: _security».

$ curl -X GET http://localhost:5984
{"couchdb":"Welcome","version":"1.0.1"}

Любая помощь будет признательна!

Ура,

Аарон. и, надеюсь, это c).

Я написал тестовый код:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Direct2D, D2D1;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
    FD2DCanvas: TDirect2DCanvas;
    FData: array[0..50000] of TPoint;
  public
    procedure CreateWnd; override;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;


    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses utils;

{$R *.dfm}

procedure TForm2.CreateWnd;
var
  i: Integer;
begin
  inherited;
  FD2DCanvas := TDirect2DCanvas.Create(Handle);

  for i := 0 to High(FData) do begin
    FData[i].X := Random(Self.ClientWidth  div 2);
    FData[i].Y := Random(Self.ClientHeight);
  end;
end;

procedure TForm2.WMPaint(var Message: TWMPaint);
var
  PaintStruct: TPaintStruct;
begin
  BeginPaint(Handle, PaintStruct);
  try
    FD2DCanvas.BeginDraw;

    try
      FD2DCanvas.Polyline(FData);
    finally
      FD2DCanvas.EndDraw;
    end;

  finally
    EndPaint(Handle, PaintStruct);
  end;

end;

procedure TForm2.WMSize(var Message: TWMSize);
begin
  if Assigned(FD2DCanvas) then begin
    ID2D1HwndRenderTarget(FD2DCanvas.RenderTarget).Resize(D2D1SizeU(ClientWidth, ClientHeight));
  end;
end;

end.

Кроме того, я действительно хочу рисовать длинные полилинии в реальном коде, так как система, над которой я работаю, должна рисовать много ~ 2500 точек полилинии (не менее 10К из них).

Обновлено (06.11.2010)

Ранее я узнал, что Direct2D, похоже, не любит полилинии, он рисует быстрее, если вы используете много отдельных линий (2 точки полилинии.)

Благодаря Крису Бенсену я выяснил, что медленность была с большими полилиниями при использовании сглаживания . Поэтому я отключил сглаживание, как предложил Крис, и производительность увеличилась с ~ 6000 мс до ~ 3500 мс для рисования 50 тыс. Линий.

Все еще можно улучшить, потому что Direct2D просто не обрабатывает полилинии при использовании сглаживания ]. С отключенным сглаживанием это ' s как раз наоборот.

Теперь время рисования с помощью Direct2D 50k линий, если я рисую большую ломаную линию без сглаживания, составляет ~ 50 мс. Отлично, а!

Дело в том, что GDI по-прежнему быстрее, чем Direct2D , если я рисую в растровое изображение, а после этого я возвращаю результат обратно в форму, он рисует со скоростью ~ 35 мс. и с таким же качеством графики. И Direct2D, похоже, уже использует обратный буфер (он просто рисует, когда вызывается EndDraw () ).

Итак, можно ли это как-то улучшить, чтобы использование Direct2D было выгодным с точки зрения скорости?

Вот обновленный код:

type
  TArray = array[0..1] of TPoint;
  PArray = ^TArray;

procedure TForm2.WMPaint(var Message: TWMPaint);
var
  PaintStruct: TPaintStruct;
begin
  FD2DCanvas.RenderTarget.SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
  BeginPaint(Handle, PaintStruct);
  try
    FD2DCanvas.BeginDraw;
    try
      FD2DCanvas.Pen.Color := clRed;
      FD2DCanvas.Polyline(FData);
    finally
      FD2DCanvas.EndDraw;
    end;   
  finally
    EndPaint(Handle, PaintStruct);
  end;
end;

Кстати, даже если я использую предложение Криса о создании геометрии заранее, скорость примерно такая же, как у GDI, но все же не выше.

Мой компьютер обычно запускает приложения Direct3D и OpenGL, и вот результат dxDiag: http://mydxdiag.pastebin.com/mfagLWnZ

Я буду рад, если кто-нибудь сможет объяснить мне, почему такая медлительность. Мы очень ценим пример кода.

22
задан Community 23 May 2017 в 11:53
поделиться