Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eYwfT-0001IJ-P4 for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jan 2018 16:22:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eYwfT-0007Fa-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jan 2018 16:22:27 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1eYwfS-0007FN-IZ for pgsql-hackers@lists.postgresql.org; Tue, 09 Jan 2018 16:22:26 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1eYwfK-0000a8-JG for pgsql-hackers@postgresql.org; Tue, 09 Jan 2018 16:22:25 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id DB9A721C1ADB; Tue, 9 Jan 2018 19:22:15 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from zilders-MacBook-Pro.local (gw.postgrespro.ru [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 2A54121C074C; Tue, 9 Jan 2018 19:22:15 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1515514935; bh=f1JIHHGfA2jtSZ8L3Ld6leipk4F8VBpHPW5wOKEbMYk=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=JSQd6nxMxpWSED9/U8PeMmmQZxTSsosnvr+Zfxb3Q+rYIgvxPVo6ZrpR887FbfLWh g0teY/p4Vr7zk+tZSzftpxcMf0Zh0egg8pgbzqiO1dDjqZblXrt6caFtRt1G6SmZpW oRqx28JvFCGoR95RyUH/FnmrS6UALwqNpvxYHR1E= Subject: Re: General purpose hashing func in pgbench To: Fabien COELHO Cc: pgsql-hackers References: <0e8bd39e-dfcd-2879-f88f-272799ad7ef2@postgrespro.ru> <699225ee-c30c-b22e-4028-415e9eab26b2@postgrespro.ru> <80e9c570-5c49-1a01-f309-3d8d0cbbae42@postgrespro.ru> <38f1503e-7b63-4612-24a9-041af25bb022@postgrespro.ru> From: Ildar Musin Message-ID: <9603bac9-ae5d-36c5-5978-a88bdb700e37@postgrespro.ru> Date: Tue, 9 Jan 2018 19:22:14 +0300 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------B3F1CC0E440B8CBFBF6509A8" Content-Language: ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------B3F1CC0E440B8CBFBF6509A8 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hello Fabien, 25/12/2017 19:17, Fabien COELHO пишет: > >>> However, the key can be used if controlled so that different values do >>> not have the same randomization in different part of the script, so as >>> to avoid using the same patterns for different things if not desirable. >> >> Original murmur algorithm accepts seed as a parameter, which can be used >> for this purpose. I used value itself as a seed in the patch, but I can >> turn it into a function argument. > > Hmmm. Possibly. However it needs a default, something like > >   x = hash(v[, key]) > > with key some pseudo-random value? > Sorry for a long delay. I've added hash() function which is just an alias for murmur2. I've also utilized variable arguments feature from least()/greates() functions to make optional seed parameter, but I consider this as a hack. Should we probably add some infrastructure for optional arguments? Docs and tests are on their way. Thanks! -- Ildar Musin Postgres Professional: http://www.postgrespro.com Russian Postgres Company --------------B3F1CC0E440B8CBFBF6509A8 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pgbench_hash_v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pgbench_hash_v3.patch" ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9leHBycGFyc2UueSBiL3NyYy9iaW4vcGdi ZW5jaC9leHBycGFyc2UueQppbmRleCAyNjQ5NGZkLi4zNDBjMDIwIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnYmVuY2gvZXhwcnBhcnNlLnkKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL2V4cHJw YXJzZS55CkBAIC0xMzEsNyArMTMxLDggQEAgbWFrZV9vcCh5eXNjYW5fdCB5eXNjYW5uZXIs IGNvbnN0IGNoYXIgKm9wZXJhdG9yLAogICogTGlzdCBvZiBhdmFpbGFibGUgZnVuY3Rpb25z OgogICogLSBmbmFtZTogZnVuY3Rpb24gbmFtZQogICogLSBuYXJnczogbnVtYmVyIG9mIGFy Z3VtZW50cwotICoJCQktMSBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGxlYXN0ICYgZ3JlYXRl c3QgbWVhbmluZyAjYXJncyA+PSAxCisgKgkJCS0xIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3Ig bGVhc3QsIGdyZWF0ZXN0ICYgaGFzaCBmdW5jdGlvbnMKKyAqCQkJIG1lYW5pbmcgdmFyaWFi bGUgYXJndW1lbnRzIG51bWJlcgogICogLSB0YWc6IGZ1bmN0aW9uIGlkZW50aWZpZXIgZnJv bSBQZ0JlbmNoRnVuY3Rpb24gZW51bQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0CkBAIC0y MDAsNiArMjAxLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QKIAl7CiAJCSJwb3dlciIsIDIs IFBHQkVOQ0hfUE9XCiAJfSwKKwl7CisJCSJoYXNoIiwgLTEsIFBHQkVOQ0hfSEFTSF9NVVJN VVIyCisJfSwKKwl7CisJCSJoYXNoX211cm11cjIiLCAtMSwgUEdCRU5DSF9IQVNIX01VUk1V UjIKKwl9LAorCXsKKwkJImhhc2hfZm52MWEiLCAtMSwgUEdCRU5DSF9IQVNIX0ZOVjFBCisJ fSwKIAkvKiBrZWVwIGFzIGxhc3QgYXJyYXkgZWxlbWVudCAqLwogCXsKIAkJTlVMTCwgMCwg MApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMKaW5kZXggZmMyYzczNC4uNzFlNDgxNCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j CkBAIC02MSw2ICs2MSwxNCBAQAogI2RlZmluZSBFUlJDT0RFX1VOREVGSU5FRF9UQUJMRSAg IjQyUDAxIgogCiAvKgorICogSGFzaGluZyBjb25zdGFudHMKKyAqLworI2RlZmluZSBGTlZf UFJJTUUgMHgxMDAwMDAwMDFiMworI2RlZmluZSBGTlZfT0ZGU0VUX0JBU0lTIDB4Y2JmMjlj ZTQ4NDIyMjMyNQorI2RlZmluZSBNTTJfTVVMIDB4YzZhNGE3OTM1YmQxZTk5NQorI2RlZmlu ZSBNTTJfUk9UIDQ3CisKKy8qCiAgKiBNdWx0aS1wbGF0Zm9ybSBwdGhyZWFkIGltcGxlbWVu dGF0aW9ucwogICovCiAKQEAgLTkxMiw2ICs5MjAsNTEgQEAgZ2V0WmlwZmlhblJhbmQoVFN0 YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcykKIH0KIAogLyoK KyAqIEZOVi0xYSBoYXNoIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQ2NAorZ2V0SGFzaEZu djFhKGludDY0IHZhbCwgdWludDY0IHNlZWQpCit7CisJaW50NjQJcmVzdWx0OworCWludAkJ aTsKKworCXJlc3VsdCA9IEZOVl9PRkZTRVRfQkFTSVMgXiBzZWVkOworCWZvciAoaSA9IDA7 IGkgPCA4OyArK2kpCisJeworCQlpbnQzMiBvY3RldCA9IHZhbCAmIDB4ZmY7CisKKwkJdmFs ID0gdmFsID4+IDg7CisJCXJlc3VsdCA9IHJlc3VsdCBeIG9jdGV0OworCQlyZXN1bHQgPSBy ZXN1bHQgKiBGTlZfUFJJTUU7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAq IE11cm11cjIgaGFzaCBmdW5jdGlvbgorICovCitzdGF0aWMgaW50NjQKK2dldEhhc2hNdXJt dXIyKGludDY0IHZhbCwgdWludDY0IHNlZWQpCit7CisJdWludDY0CXJlc3VsdCA9IHNlZWQg XiAoc2l6ZW9mKGludDY0KSAqIE1NMl9NVUwpOworCXVpbnQ2NAlrID0gKHVpbnQ2NCkgdmFs OworCisJayAqPSBNTTJfTVVMOworCWsgXj0gayA+PiBNTTJfUk9UOworCWsgKj0gTU0yX01V TDsKKworCXJlc3VsdCBePSBrOworCXJlc3VsdCAqPSBNTTJfTVVMOworCisJcmVzdWx0IF49 IHJlc3VsdCA+PiBNTTJfUk9UOworCXJlc3VsdCAqPSBNTTJfTVVMOworCXJlc3VsdCBePSBy ZXN1bHQgPj4gTU0yX1JPVDsKKworCXJldHVybiAoaW50NjQpIHJlc3VsdDsKK30KKworLyoK ICAqIEluaXRpYWxpemUgdGhlIGdpdmVuIFNpbXBsZVN0YXRzIHN0cnVjdCB0byBhbGwgemVy b2VzCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0xODY4LDYgKzE5MjEsMzcgQEAgZXZhbEZ1bmMo VFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAK KwkJCS8qIGhhc2hpbmcgKi8KKwkJY2FzZSBQR0JFTkNIX0hBU0hfRk5WMUE6CisJCWNhc2Ug UEdCRU5DSF9IQVNIX01VUk1VUjI6CisJCQl7CisJCQkJaW50NjQJdmFsOworCQkJCWludDY0 CXNlZWQgPSAwOworCQkJCWludDY0CXJlc3VsdDsKKworCQkJCUFzc2VydChuYXJncyA+PSAx KTsKKworCQkJCWlmICghY29lcmNlVG9JbnQoJnZhcmdzWzBdLCAmdmFsKSkKKwkJCQkJcmV0 dXJuIGZhbHNlOworCisJCQkJaWYgKG5hcmdzID4gMikKKwkJCQl7CisJCQkJCWZwcmludGYo c3RkZXJyLAorCQkJCQkJCSJoYXNoIGZ1bmN0aW9uIGFjY2VwdHMgbWF4aW11bSBvZiB0d28g YXJndW1lbnRzXG4iKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKworCQkJCS8qIHJl YWQgb3B0aW9uYWwgc2VlZCB2YWx1ZSAqLworCQkJCWlmIChuYXJncyA+IDEpCisJCQkJCWlm ICghY29lcmNlVG9JbnQoJnZhcmdzWzFdLCAmc2VlZCkpCisJCQkJCQlyZXR1cm4gZmFsc2U7 CisKKwkJCQlyZXN1bHQgPSAoZnVuYyA9PSBQR0JFTkNIX0hBU0hfRk5WMUEpID8KKwkJCQkJ Z2V0SGFzaEZudjFhKHZhbCwgc2VlZCkgOiBnZXRIYXNoTXVybXVyMih2YWwsIHNlZWQpOwor CQkJCXNldEludFZhbHVlKHJldHZhbCwgcmVzdWx0KTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJ CX0KKwogCQlkZWZhdWx0OgogCQkJLyogY2Fubm90IGdldCBoZXJlICovCiAJCQlBc3NlcnQo MCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5oIGIvc3JjL2Jpbi9w Z2JlbmNoL3BnYmVuY2guaAppbmRleCBjZTNjMjYwLi41MjdlMmE4IDEwMDY0NAotLS0gYS9z cmMvYmluL3BnYmVuY2gvcGdiZW5jaC5oCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNo LmgKQEAgLTc3LDcgKzc3LDkgQEAgdHlwZWRlZiBlbnVtIFBnQmVuY2hGdW5jdGlvbgogCVBH QkVOQ0hfUkFORE9NX0dBVVNTSUFOLAogCVBHQkVOQ0hfUkFORE9NX0VYUE9ORU5USUFMLAog CVBHQkVOQ0hfUkFORE9NX1pJUEZJQU4sCi0JUEdCRU5DSF9QT1cKKwlQR0JFTkNIX1BPVywK KwlQR0JFTkNIX0hBU0hfRk5WMUEsCisJUEdCRU5DSF9IQVNIX01VUk1VUjIKIH0gUGdCZW5j aEZ1bmN0aW9uOwogCiB0eXBlZGVmIHN0cnVjdCBQZ0JlbmNoRXhwciBQZ0JlbmNoRXhwcjsK --------------B3F1CC0E440B8CBFBF6509A8--