Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1boc3O-0000GS-Fl for pgsql-performance@arkaria.postgresql.org; Mon, 26 Sep 2016 19:59:06 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1boc3N-0006Or-Ug for pgsql-performance@arkaria.postgresql.org; Mon, 26 Sep 2016 19:59:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1boc3N-0006O9-1d for pgsql-performance@postgresql.org; Mon, 26 Sep 2016 19:59:05 +0000 Received: from mail-bl2nam02on0051.outbound.protection.outlook.com ([104.47.38.51] helo=NAM02-BL2-obe.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1boc3I-0006Pp-Lv for pgsql-performance@postgresql.org; Mon, 26 Sep 2016 19:59:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=BlueTreble.onmicrosoft.com; s=selector1-bluetreble-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=cA3kaoR5LiMdy4XCLP5KhXtS06tZ2s3ijOvdC5/iVRk=; b=WI+RMWdrRCkPD/zUOv2Eu4zG+quE0M1mYp5PIZEzBFwH7dFoNhzqLRUJ+e8iQb9WPx07mKb0KZsGEOCn3qhM+WzKUqycrLT0n9Te5HdiiQ1PVb/e2MTLPXicELcO0my5Sj2kq2LKRN+USwJQ78WLSZl1bQ+9RapONhOuN0mHB+w= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jim.Nasby@bluetreble.com; Received: from decina.local (70.113.16.71) by CY4PR11MB1639.namprd11.prod.outlook.com (10.172.71.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5; Mon, 26 Sep 2016 19:58:56 +0000 Subject: Re: Storing large documents - one table or partition by doc? To: Dev Nop , "pgsql-performance@postgresql.org" References: <649c3d87-0df1-a8e2-49da-bc200bc16e86@BlueTreble.com> From: Jim Nasby Message-ID: Date: Mon, 26 Sep 2016 14:58:50 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [70.113.16.71] X-ClientProxiedBy: SN1PR15CA0020.namprd15.prod.outlook.com (10.163.200.30) To CY4PR11MB1639.namprd11.prod.outlook.com (10.172.71.15) X-MS-Office365-Filtering-Correlation-Id: c337ac24-df7b-4fda-4a19-08d3e6478c7d X-Microsoft-Exchange-Diagnostics: 1;CY4PR11MB1639;2:9W18LiUurG5hHujAp2ImGoI/EaVdJ1xhVa0E/CLiYahW+UrLgx2L7vJUZfpSshOxsN8/WgC6RcSgd9XvujTUSNalj7QEC8/JlOL0xUcn1p0Ulkz6PRAQQJtP7Zgo68cWk6NTOnCfiTzjnb3bGhu3VkDL1OtwVzaFlT8BhJzhgAoOc4akz0C8rQs7PmK74jDf;3:JmnipSU76X4HPZVP7zwH9/wdDHdPf3nDz4BDT9f+47u1EqIc8asPAEtZvV9q970L7uSy0gwGVDdlz8pNPh0DDpAY7dA6/CSIIiN9XG2KVESZfbvNMAhJOKiToBj/ZKcx;25:zWhTlkJ15edNUp+w88DPuDi/A8PQFUYq6AVRPh7JnGpHIalttyQF139fLwbLsaUekEeBgFDyegG3kYOVLNp/X6rCI3ghiSDya1HYJGKNBsPZe8oCiHEgsfXb1aawVg3liVBdAXsCSz/h+vgmjbMaZBz/p2Y4avb1hS2hPu5y3/Du9iKyE4XGW+JJNT74vZkUItbuY7bzVNJndcj6Hozx7Cy/Qj+we01TErdKjx+bSBxUc3a6d++tMicMdEigikgd/1WHfQUGtnScGkbDa6PqSA0/58yLjKqG7naAjCCO4kAbO5XX3hWjYRMWkc1ZRDGgiYO9k4Vd5hdTUHmUPPH8Z0sID6299k/5ilPMGMbrnp7uHWNm4X7DyxH3qIizjX/asdRkLADgsBR6h1SnMqmTShd0+VtoLBisPlaNZhIODMI= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY4PR11MB1639; X-Microsoft-Exchange-Diagnostics: 1;CY4PR11MB1639;31:pohL3zrK7ANPUUMYSwWgxpO7isuP2Dcp9s7xvCUK1LOiAPZZB+b5sbPZilnGZTHQV1PEWiRAgln4w84j2DQwS9lrxL330P5U9sjRHe9P7I2EFHVObUyUY4MfUlPWus29cWIHewQHgxo2qtiHQO72oyWOgptUd5sQKR1pW3PtLAhoZ0Ucoj7qg4PvdMp8XoeqBS8zO2lBhygfD4NvmNnnz4uJX13/Kap9rvLYjtfMTGc=;4:VkjOIZf3N/WznyhtKPLf8+QoiUOMwThLpmHlgytAXvUr/wUd2Jx/arXfnv79Y+EwsmbP4AIgkhzBiGsVl0DFshiXBvtrty8kAIGAMDDAO1srb8eRRf7D/D5HZnQ7iaXNUE4UpOatpYuQWO2jOnEARCkOqpTuqy6HAQG1qbcDz+w3VIL/ZX56zZWf0HBbFYgMOVCdM9gdZKaR5xo2XQkZ5eWx+h04K+ZH3cKmHwOgs9ml6wzqFTApuDi1Nf+l7/YTgzm4d3RgEkGgpRcxpPHEqfrsWlu/9ZopjDmFVAoXx8uwvw0FqblNBNVMfeDZE32q7VnRNWGHxsFjyPBKASowtzFv2HanyufU+/MMeo8FZPk4altzm1acoCtoVL2T3leikFB7hmmm3YUF1K2awoic1w3frPc2aBYcdMsEVryf29s= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6042046)(6043046);SRVR:CY4PR11MB1639;BCL:0;PCL:0;RULEID:;SRVR:CY4PR11MB1639; X-Forefront-PRVS: 00770C4423 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(24454002)(199003)(61484003)(377454003)(189002)(8676002)(65806001)(81156014)(68736007)(81166006)(230700001)(2906002)(54356999)(106356001)(50986999)(92566002)(76176999)(2950100002)(42186005)(31686004)(33646002)(105586002)(65826007)(5001770100001)(66066001)(101416001)(16601075003)(3846002)(586003)(65956001)(97736004)(6116002)(64126003)(31696002)(4001350100001)(77096005)(7736002)(19580395003)(15975445007)(189998001)(83506001)(305945005)(23676002)(86362001)(2501003)(7846002)(5660300001)(107886002)(50466002)(47776003)(36756003)(85282002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR11MB1639;H:decina.local;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: bluetreble.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjExTUIxNjM5OzIzOjBUV0p6cDlBc0VXeDQ0WFgrRHdEVGY2WTVX?= =?utf-8?B?WmFlWkFHVzZ6TzN3NW5tL0FFMWdSMEM5YThQSUU1aG96Z1U5Z3ZEUmRmT2Mr?= =?utf-8?B?Rkh0cWYzVUVrcUZZK21Hb0ZjZzI1U2xYeWZwMThGMnBGTWFybjc2NGdjWmFp?= =?utf-8?B?TGFKWFdyRG9MSXdFdEJUUXlzNU9BTE5WTExHR2g5SWh1N0NsL0d1dmx2WlNI?= =?utf-8?B?ZEREV3UvTjFPNkNaL1UxUjNLelUxMUtDVHdkZmFBYVFTcVdvUVU2VmNPNVlz?= =?utf-8?B?c1JaZmduRm8zcXZxN21ITTU3TTdTaXIvaU94Qmtjb3labDZGL2xCZnlxbHNs?= =?utf-8?B?dW9Jd1Y0QTFrd3oyY2lPUEs2M3BMVFN5V2JYY1JUV2lKTENOc1RXMmJiMytW?= =?utf-8?B?akFUTmhFSHc3UzYvN2lXWm1ZcVNtMDJBMTcyVXVWUm1Wb0FlU253bnNaU05B?= =?utf-8?B?V0h4QUxLRDNkQVY0dHJxOU9LeXJaaGNZWjVpNitLREZWd3hCM1BaakdrU1Jx?= =?utf-8?B?NVRLL3hBUFpBMzdUWVMxem5FM3hsbVg4KzZuSEl0VkNNMHEzVkpFa2VsbzNR?= =?utf-8?B?aWxTL2x2Vjdkekt1NEpxOEdpSWxSWDBad2FJQ3JJejFBMzFRTjg5Wkl1ZjZh?= =?utf-8?B?MW15cC9EbnhDWERsTUpHdnV2djh2bUNqSUJyNkpQcThvOXJVbmhUb3BSZ2xZ?= =?utf-8?B?SUp2NnVPTFUzRHV1R0hiblBiOSt4VWVqV1RFcWo4eFE3dHRWc0NJRVpCa1Uv?= =?utf-8?B?a3NKOXdZRGVWSVRqSkFjbkVaY2xEVDVyNXFsUlVXUTFCK0xGYmZ1a2t3czVk?= =?utf-8?B?VkZHR1dPdDF5SERUN2FaTHI4b1U4ZlpKeVdKT2ZoOWwwRjVVVG45YmtNRUhk?= =?utf-8?B?dDByN055VWdrYVpCbnNONUhKZmFJQVFOLzQwRnhYbUNlUjdKcnd6ckdYY29W?= =?utf-8?B?dzZRaUZLcER6cTJQbHRuREVzckdJaDExRWIrSmNUVGI1TXNraGlKakIwREg3?= =?utf-8?B?ajJlbDFaUUtGRUVvckF6dEN0Y3piWEhtVDdvTHlsa0lmOGEzalc4dHdhUHA4?= =?utf-8?B?V0FibTZUa0NBMGxnWktlSGxCSW5tU2hSWFhMWWNYc0dHUE9ha1hGUG1BMVc3?= =?utf-8?B?Vm1qY2xRa3ZHN2IxY0hicFF0Y0xhcHVpZzVSaUNwTVU3bHpRaFZzUlAyZnIx?= =?utf-8?B?Q1BLRUZsVll4L1dHVm1zc0RYOEVXQi90VStPVUJyUnNtb2ZVaEM0b3RaVElx?= =?utf-8?B?blArWFF2VHgwdUJ6NG9WT1BTUi84UnliL3lRYWJyTGxiSDJ6MXNLZHB2RWRM?= =?utf-8?B?OGgxNnBMMWxTU0Q4aGRmcGxUWkFUOVFGQjdKMDJKdkRNL21zUHlrWUROdk12?= =?utf-8?B?QTFQN2JuSi9ESUo1YmNiK2tmdkdLbldTVjY0OGVuN3JTMURPRTArK0d1NzFo?= =?utf-8?B?ZWdoaHhPQ2tNNllKMS9Ia2dsM1NEUWlweVNpY29ZekRVVEdTb1lEYkRMRmtY?= =?utf-8?B?TzJNeTduQXIzd0M5bENzdVlUR2I3YjcvQ2JCSjhTblFLcmFLam9iZDlDdDBH?= =?utf-8?B?WWU1T1ZlbVZySkUvc3pFajVoM3htVVZXV0IvSjNadGtlRnhNdk9YWjZIK2t6?= =?utf-8?B?T0FMcHlLSGFmaGFoT1h2bFBKb3FXMjFtN2dYY3dEbjAzdTZwRDk4TlQ1ZjlR?= =?utf-8?B?YlZkdXhHYWFrVkpHREZabGZTMmVXbU12ckdzVlMzRWozbndiaFRnU2xjWkpE?= =?utf-8?B?NlJUQWRPYS9YUGRsY0RBM1QwU1RWK3F1MGtHNFpQaXJYc0ptaUxoWTZwZHVZ?= =?utf-8?B?ZmZaOVRreU5weFdPa3BOYytyeHZpVzVOTEx5aS9ONzEwZDQ5clZkQUpQb0Rq?= =?utf-8?Q?hHAwlhOmFh0=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR11MB1639;6:jBFYwL4DZqKeBF3Mzrrt03Aw2P0wH6w5el1v5lquqhUwO5SM3Kso0SVOl6JeUmAbZcRkkEQmjOFbvtfGlZPTCTDDUYugA1GeIHoBCt07Sit31VqIU7Yn0K8hNUIV6U2QPdXm7Kgbz8a8Wjkz2vaEeE6soXKW+001bBN9csckP1Z0bc2No91k0X9fomZQwJKx32u02h2D8ayS9ZFwBBGdLffQYlNDsihJjn+Pm2VszWHff+ft8WDvR8eoeRMChB4L3K0O5QZXLY9SfjPI6KZJRn1jaRtfLKxu85PchGIyJHTnhn4F81LNsepIHaCmdKE2;5:Qks5GNewCedyRLIpxfoO9edd+XmSmqavwWMXdAsYzcjsi7qtlPlaBUr6Jc0ahWq3XrnTIbL5fsXkfFy6s79UFNthq5OyflmkcLIXMAMSoYAqut6R03l15Pn8QCm6Lrd3yxrrMXJcTD2A9CYTcNw2ug==;24:kW79Ajmu0hRe/zxYTABCQQtqe9emsbHHJ6GqJly53UKQeM9TpObGfppE4ceQ2ALLyzVUQsFew0muYrbVsX0Qr6Itwd1IKIXlG2mqTchR1R0=;7:3VOZN5YpZZlFM0E3vrx0+X7pEYYRQZpuvHeagFK5iK9faKcCVnD3WvO92eO0yGxYtni89IgmwCI7Jq0VNRJOXgdHxBrpZ+SPNwfcRsPhdRpb3MtpgePfuSaMV+6bpJZCFVGiLfA4Dbj781iHF5v53Wcf5KK27EdQVkFanUi7CWkZcDLyxP2A2RL+MwuwNV7mJGDwyiXFnF8R2tt+emyY3MjkmVZ2QDUzh9xTcM8vqtfSNofdOOQwu2PIeOHZfBWps5yL3CMfc2ktZNjr9YZDd0k5Sm5TsnPA2Fk4OnY8MCl5TNOhH5r7gK4QNhlIa5kp SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: bluetreble.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2016 19:58:56.1257 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1639 X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-performance Precedence: bulk Sender: pgsql-performance-owner@postgresql.org Please CC the mailing list so others can chime in or learn... On 9/26/16 3:26 AM, Dev Nop wrote: > What I would look into at this point is using int ranges and arrays > to greatly reduce your overhead: > CREATE TABLE ...( > document_version_id int NOT NULL REFERENCES document_version > , document_line_range int4range NOT NULL > , document_lines text[] NOT NULL > , EXCLUDE USING gist( document_version_id =, document_line_range && ) > ); > > > Thanks! Some new things for me to learn about there. Had to read "Range > Types: Your Life Will Never Be The Same" - lol. > https://wiki.postgresql.org/images/7/73/Range-types-pgopen-2012.pdf > > To check I understand what you are proposing: the current version and > history is stored in the same table. Each line is referred to by a > sequential line number and then lines are stored in sequential chunks > with range + array. The gist index is preventing any insert with the > same version & line range. This sounds very compact for a static doc but You've got it correct. > doesn't it mean lines must be renumbered on inserts/moves? Yes, but based on your prior descriptions I was assuming that was what you wanted... weren't you basically suggesting storing one line per row? There's certainly other options if you want full tracking of every change... for example, you could store every change as some form of a diff, and only store the full document every X number of changes. -- Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX Experts in Analytics, Data Architecture and PostgreSQL Data in Trouble? Get it in Treble! http://BlueTreble.com 855-TREBLE2 (855-873-2532) mobile: 512-569-9461 -- Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance